粉丝664获赞4534

大家好,我是百里,这节课我们就开始安装 rocket mq, 在安装 rocket mq 之前,我们需要先准备几个软件包,第一个就是 rocket mq 自己,第二个就是 j d k, 因为 rocket m q 依赖于 j d k 的环境,还有就是 menwin 和 dashboard, 因为 rocket m q 没有图形化管理界面,所以呢我们需要使用 menu 来进行编译,搭西 boot, 然后通过搭西 boot 来观察和管理 rocket m q, 那么这些软件大家可以自行在对应的官网进行下载,或者在评论区留言获取本片笔记及相关的资料包。那么接下来呢,我们就安装 gdk, 那么呢我们先通过连接工具呢,回到我们的这一个根目录,然后我们创建一个 a p p 文件夹,我们刚刚提到的四个软件包呢,后续我们都放到这个 a p p 的目录下进行统一管理,那么我们先进入 app 目录,并且创建一个 gdk 文件夹,然后我们再进入到 gdk 目录下,这个时候呢我们就将这一个软件包,然后上载到我们对应的这一个 gdk 的目录下, 那么可能有些小伙伴使用的是一些其他的工具呢,就可能比我这个更加方便,那么都是同样的呢,就是我们需要将我们的这一个压缩包呢上载到服务器上,那么这个时候呢,我们观察一下这个文件的一个后缀是不是,那么呢他就使用一个天雅的这一个命令来进行一个解压, 那么解压之后呢,我们就可以得到一个 g d k 的文件夹,对不对?是不是我们这个时候呢就有一个 g d k 的文件夹,那么这个时候呢我们就进入这一个 g d k 的目录,通过了 p w d 的这一个命令呢,获取到 g d k 的一个完整目录,那么这个时候呢,我们就修改一下这一个环境变量,然后呢配置我们的 g d k 环境, 那么呢我使用的是一个全局变量,那我们将这一个配置的话就放在这一个末尾,那么这个呢我们就不再一个一个的去敲了,那我们就将笔记中的这一个完整的配置呢进行拿过来, 这个时候呢我们就退出,那么这个时候我们使用这一个 java conversion 呢,它是不会生效的,大家发现没,他现在还是一点八点零六五,那么呢我们下载的 j d k 是不是一点八零幺七幺,因为呢我们现在呢还需要通过一个 缩死命令来将我们的这一个环境变量进行生效,那么呢我们使用的缩死这个命令之后呢,我们再查看它的版本呢 就已经配置成功了,那么这些命令呢,在我的笔记里面呢都已经有完整的描述了,来看没有环境变量,那么修改还有刷新,然后呢再查看版本,那么呢大家可以根据这一个命令呢完整的来进行一个 配置,那么接下来呢我们就安装一个 rocket mq, 那么 rocket mq 同样的我们回到 a p p 的一个目录下,然后我们创建一个 locky m q 它所对应的一个目录,并且呢我们来到这个目录下,然后现在是没有东西的,那么呢我们在这一个上载文件的这一边呢,也是可以使 使用到我们刚刚的这一个命令,然后呢来到这个文件夹下之后,我们就将 rookie 的 m q 的这一个包呢就也传到这一个目录下, 那么这个时候呢,我们是不是就有一个 located me to 的包了,那么呢我们同样的看一下它的一个结尾,也就是文件名,那么它是一个 vip, 那么呢我们需要换一个解压命令, 那么同样的解压了之后呢,我们就进入到这一个 locate m q 的一个文件夹下,然后同样的使用 p w d, 那么呢就可以获取到它的一个完整目录,那么同样的我们也修改它的一个黄金变量, 那么呢我们还是追加在结尾,同样的我们呢也 不再一个个的去写,那么呢我们将这个笔记里面的这个配置呢就直接拿过来, 那么我们将这个复制过来,那么我们这个 rookie 的 home 呢,其实就是为了方便我们后续去启动我们的一个 broker 啊做的一个提前配置,那么呢我们也需要将这一个 rookie 的面 qq 它的一个配置到我们的 pass 里面来, 然后我们配置在这个前面,并且呢我们同时呢也配一个 name server 的一个参数, 那么其实呢它就是我们上节课讲到的,我们 brook 在启动的时候呢,它就会去注向我们的人们身份去注册嘛,那么这个呢是后续使用到的,那么呢这里我们也先加上,并且呢我们在使用我们的一个 sos 命令来将我们的一个黄金面料配置生效, 那么到了这一步呢,我们整一个 looking 的 mq 的安装呢就已经结束了, 但是呢我们现在还不能够直接去启动我们的一个 name server 和 broker, 因为呢我们还需要修改一下它一个相关的启动配置, 那么呢这两个启动配置的修改呢?我们就下节课继续,这节课呢我们就到此结束。


最近用到的最新版的 local m q, 五点三点三,然后在安装的过程中会有那个端口冲突,因为是最新的嘛,然后它的一些配置参数可能跟网上搜到的不一样,官网也没写那么细, 大家看一下这个配置文件,在 com 下面有个 i m q, 然后杠 prox, 然后修改这里面的端口就行了。还有一个就是我们如果说客户端然后去发送 mq 的 时候,你要配置它的公网 ip, 除非说你的硬件和 mq 如果说在同一台机器上面,你是可以 不用去配置,因为当时测试的时候我是在自己的本机测试,然后我的 mq 是 在云上面,所以说你要配置公网 ip, 不然的话也可能说发送的时候你老是发送失败,也就是要修个那个 block 跟 configure, 大家看一下,这样的话大家就少踩坑啊。

好,我们接着来讲这个 update topic, 这是用于创建或者更修改一个 topic 的一个信息。首先我们来演示一下这个命令它怎么样来使用哈。呃, 首先我们要用到这个工具,是点到并并目录下面,他这个有一个 mq 啊,一听就是管理工具,此 meaning 就是 update poppy 信息。 我们创建 topic 啊,首先我们要指定集群啊,这个集群呢,没有改名字啊,默认的就是这个名,你就安装完成之后,比如我没有修改 其其实名称,那这个就是 default cluster, 除了指定这个,我们还得指定 name server 的一个地址,还要跟 name server 来进行交互,但因为都是起在本机,所以你这里是用 log host。 九八七六,这是 name server 的端口。 接下来就是杠七啊,杠七就是指定就是 topic 这个意思。杠七指定这个 topic 的名称,我叫 topic 一啊,就创建一个 topic, 名为 topic 一啊, 那么这个 great success, 看好这个,那么我们把这个记录一下 命令啊, 这里面杠七是指定这个 topic 的名称, 杠 c, 实际上这个杠 c 是杠杠 faster name 啊, 这个就是集群名称 class 改名称。 杠恩就是 name server 的一个地址,杠恩就是杠杠 name server rv a d d r, 这个就是 name server name server 的 age。 杠 b 就是正面,虽然没有写啊,虽然没有写这个杠 b, 但是 它的作用就是指定杠杠 broker a d d r, 也就是 broker 的地址啊, 也就是我们我们这里面这个 limo server 的这个地址是必填的啊,你如果不填它,不填它是会报错的。如果你没有指定杠 b 啊,那你这个杠 c 也是要指定的啊,也是必填的。因为我这里没有指定杠 b, 所以这个杠 c、 杠 n 都是必填的。杠 t 那就不用说了,连名称都没有,他怎么给你创建呢?是不是? 好,这是这下面的 update 的 topic, 它下面的是创建 topic 哈,创建 topic, great topic。 好,那这是这一小节的内容。

好,我们接着来看一下这个 rock and micro 它的一个核心的一个组件呃,了解它核心组件的目的也是为了梳理这个 rock and micro 它的一个工作流程,那 rock and micro, 它的核心组件包括就是 第一个就是 name sour 啊,就我们也叫命名福气,又叫名声福气,主要用于管理和维护 locom 组集成的一个原数据信息啊,那这个原数据信息包括哪些呢?比如说像这个 topic 啊,就是主题 broker 啊,这主机这个节点福气啊,嗯, ok 啊,是它的一个组件啊,它的组件物流信息啊等等。那生产者和消费者通过与这个 limo server 胶布来获取这些 相关信息,像是 topic 的信息啊, broker 的信息啊,路由信息等等,那他的呃,他管理这些原数据,这些信息啊,集成的原数据信息为了给谁用呢?主要就是给生产者、消费者来使用的 producer 啊,深山者,他就主要负责将这个消息发送到指定的这个 topic 啊,就是发送到指定的这个主题上面去。那深山者可以同步或者异步的发送消息,并且可以设置消息的属性啊,顺序以及延迟等等这些特性啊。 那这就是在生产消息的时候都可以指定无休码,就是消费者啊,消费者就是订阅一个啊,或者多个这个 topic, 并且从这个入口的 mq 集群当中拉取消息啊。 消费者,那可以集群模式或者广播模式消费消息,并且支持顺序消费啊,消息过滤啊等等功能啊 啊,这个,这个是他那个控控胸膜啊, broker 啊, broker 呢,就是实际上存储数据的一个地方啊, broker 的 micro 集群当中的消息存储以及处理的一个节点啊, 那每个 broker 负责存储一部分脱皮卡的一个信息啊,他的一个消息啊,脱皮的,并且呃处理这个生产者和消费者的一个请求。那每个 broker 啊,都有自己的角色和身份啊, 并且通过呃与这个 name server, 也就是命名服名称服务器交互来注册和获取这个路由的信息。 topic 这一块啊,它主要是一消息,我们发送消息,消息它的一个逻辑分类的一个单位啊,逻辑分类, 那生产者将这个消息发送到这个特定的主题当中,而消费者就主要订阅这个感兴趣的这个主题 消息对列啊, message q 啊,嗯,这个有点名了啊啊,嗯,就首位呼应,因为我们 roco 本身就是个 m q 啊,但这里它也有这个消息对列,或者叫工作对列这样的一个角 角色,他这个就是每个主题可以被细分为啊,多个消息对联啊,你看他这个概念啊,在卡不卡当中,每个主题他可以被细分为,是吗? 分区啊, partition, 它这里它又叫做是湘西对列,又又分为这个对列,叫对列这个概念。在 rebian code 当中,它这里面它它是那个,就是公,就是 work and cube, 就是 cube 啊,就是湘西对列, 其实都是啊,有这个作用,只不过叫法,只要理解它的概念啊,只不过叫法不一样啊,名称命名不一样。 好,这就是如何 mac 核心组件,那接下来我们讲这个核心组件,目的就是为了说明这个他这个工作流程啊,看一下,梳理一下他这个工作流, 那入海 mq 它的一个工作流程就是,首先这个生产者就是 producer 将这个消息发送到这个指定的这个 topic 啊,它, 呃,我们前面不是有 lim server 嘛,他这个训练者,他肯定首先是跟这个 lim server 进行交互,他获取目标 topic 的一个路由信息,然后选择合适的这个 broker 发送消息, 那 broker 接收到深圳者发送的消息之后,将其存储到磁盘上的这个消息对列当中啊, broker 将这个消息持久化啊,就是里程出到此盘,实际上就是一个持久化的一个动作,并且配置到配,嗯,根据配置的这个同步或者异步刷盘策略啊,将这个消息 刷写到这个词盘。第三步就是消费者 consumer 订阅感兴趣的这个 topic 啊,消费者他首先呢还是跟这个 name server 进行交互,获取订阅订阅的这个 topic 主题的这个录用信息,然后选择合适的 broker 进行 消息这个拉取,因为 topic 他的一个路由信息,他肯定会进入这个 topic, 在哪在哪个 broker 啊,所以他就直接找到这个 topic 所在这个 broker 啊,拿取消息,那消费者消消费完消息之后,可以向这个 broker 发送确认消息,也就是 p c k 啊,确认消费成功, 那 broker 更新消息的这个消费进度。 第六步就是 lamb sewer 定期向这个 producer 啊,向这个 producer 和这个呃消费者提供这个最新的路由信息,以便他们能够根据变化的集成状态啊进行更新。 好,这就是 rookmaker 大概的一个流程,所以它这里面呢?它首先是有这个 呃, number server 这么一个概念, number server 实际上也有点类似于卡不卡当中这个 zookeeper, 对不对啊?原数据的一个管理,在原数据管理这块儿,它就有点类似于卡不卡的是 zookeeper 啊,这是这节内容。


ok mq 啊,根本没有实现真正的推模式,包括像卡夫卡拿口子也都一样,一般来说啊,像消息中间键或者配置中心啊的数据获取呢,有两种方式,一种是推,一种是拉。所谓推的模式呢,比如说客户端和服务端之间建立一个长连接,当服务端数据发生变化,立即通过这个已经建立好的长连接将数据推送过来。 拉的模式呢,就是客户端通过不断轮巡的方式检查数据是否发生变化,如果有变化,那就把数据给拉回来。推的优点呢,其实就是实时性好,一旦数据变化呢,客户端可以立刻的感知到,但是缺点就是服务端需要维护大量的 pcp 的链接,这会占用大量的内存和 cpu 的资源,并且如果有大量的消息推过来,可能也会对客户端造成一定的压力。 拉的模式的优点是实现起来很简单,而且呢我们自己可以控制拉的速度,但是弊端呢,也显而易见,轮循呢,一定存在着延时性的,并且呢轮循的方式对客户端也会造成一定的压力。而很多中间键啊推和拉之间呢,选择了一种推拉结合的模式,也就是所谓的长轮循,就是说客户端会向服务端发起 长轮巡请求,如果有数据变更就直接返回,如果没有,也不会立即的断开连接,而是等待一会,等待的过程当中,如果有数据的变化,那么就把数据返回回来,如果过了一段时间还是没有数据的更新,那么就在断开连接过一段时间之后,再重新发起一个长轮巡的请求,这样呢,可以把推和拉的优点给结合了一下,相对来讲这个方案更受欢迎一些。 所以很多中间键呢,我直接运用长轮循的方案,要么就是用长轮循来实现推轮循来实现拉。你比如说在绕给大 m q 的 pro 与筷子 hold service 当中呢,是用长轮循继续拉,实现了推的模式,如果大家感兴趣的话,可以去看一下原码。

大家好,我是爱讲 java 的 king, 今天呢,我们给他们继续解读大厂高并发系统设计 rockin q 如何进行性能调优。我们知道 rockin q 呢是阿里用于双十一的一个高病发消息中间见,那么一般情况下面绝大部分同学呢,会认为 rockin q 它的并发是十万, 但其实如果你进行一个全方位的调优的话呢,若可能 q 的性能可以到八十万,九十万的一个并发,甚至接近一百万。那么我们来看一下若可能 q 如何进行性能调优。 如果你要把 rock and q 进行性能调料的话呢,你要站在多个维度,比如第一个维度要站在 g v m 的这个层面,首先的话呢,我们要去尽量的去减少 s t w, 去减少暂停,那么第一个方式呢,叫我把对应的监控给暂停呢,比如像 rocken q 里面它有一个 rock 抗缩呢,就是他一个监控后后端,那么这样的话呢,可以把这个监控后台给关了。然后的话呢,另外一般的公司在运动员方面也一些专门的监控组件啊,比如说撒 beast 啊,或者是其他的一些东西,对不对?我们也可以把它关了,你只是用最简单的这种适应命令进行监控就可以了, 这样的话呢,就可以去尽量的减少我们 g v m 的 s t w。 然后第二个点的话呢,可以去消除偏向锁。 大家如果知道啊,在 singknights gdk 一点六的版本之后,他就会有偏向锁,乐观锁,还有呢这种 无锁以及了重量级锁,所以呢,生根带子自断,它会有锁的一个状态的变化,但是在若肯克当中,它都是多线程,所以它的锁竞争呢比较激烈,所以一般我们可以 把偏向锁给取消掉了,因为呢你在多线的场景下面,偏向锁开启的话呢,对不对?有一定开销,同时的话要撤销,所以这个开销是没有必要的,所以的话呢,我们可以看到 在 g 啊,在 rockton q 的他的一个配置 g 元面的参数里面有一个叫做杠叉叉,然后呢减号,减号就是禁止 uzi bastar looking, 这个就是把我们的偏向锁给禁用啊,这是我们刚才所说的禁用偏向锁。 那除了金融偏向锁之外,第二个点的话呢,就是在 g 一元门层面,我们需要进行优化垃圾回收机制,一般来说推荐使用 g 一垃圾回收器, g 一垃圾回收器呢,一般把堆内存配大一点啊, 所以呢我带他们来看一下 g 一垃圾回收器一些相关的参数设定。首先画的话,首先的话呢看我们这个参数杠叉叉冒号加优特的 g e g c, 这就是使用 g 一垃圾回收器同时设定他的堆大小啊,一般来说呢,我们推荐可以把堆的这一个空间设置成 八个 g 啊,甚至呢可以设置成十六个 g, 更多的啊,如果你内存比较大的话呢,你可以把它设置成三十二个 g, 然后呢底下还有几个参数至关重要,比如 g 一 he pro ranges size, 把它设置成一十六张, 就是在这一里面他有一个分区,就是他会把内存呢,比如说八个 g 分成很多个区,每一个区的默认大小一般情况下面是两兆,但是呢如果你要做 的优化的话,建议把它配成一十六张,因为他分区的越小的话,其实他损耗的内存会越多,进行垃圾回收的这一个效率呢也相对来说会偏低,所以呢我们建议把它是大一点, 然后的话呢我们还有一些其他的参数,比如说 ge reserve percent 等于二十五, 这个呢就是你之一在管理老年代里面,你要预留百分之二十五的内存空间,确保你新生代,然后晋级到老年代里面,他有足够的空间, 一般在 g e m g d k 一点八的它的默认值是百分之十,所以呢我们需要把它调大一点,这样的话呢可以就是没有必要造成什么我新生代晋级的时候,我没有足够的空间可以进行释放好。然后还有一个参数,就是我们的 indetette, 然后 黑普啊,这个什么 person 的等于三十,这个参数是什么呢?就是当堆内存它的使用率达到百分之三十之后,我们就可以启动之一的并发垃圾回收,开始尝试回收一些垃圾对象, 一般来说这个默认值是百分之四十五,那为什么要把它调低呢?就是在很多情况下面啊,如果你让他百分之四十五触发的话呢,那一次垃圾回收他的耗时就会过长,所以呢我们可以适当的提高 gc 的一定频率,然后呢减少单次垃圾回收耗时过长的问题。 ok, 然后底下还有一系列的参数,这个呢我就不进行一个细讲了,这是 g v m 的一些参数设定,进行对应的调优。好,我们回来除了 g v m 层面之外的话呢,其实你如果要让 rockin q 有高效性 或者是有高性能的话,还要站在操作系统层面,首先的话呢,操作系统层面我们挨个来讲基本的参数啊,基本的参数呢,有几个点?第一个点这个叫做 of accommodating, 然后下划线 memory 等于一,这是什么意思呢?这个参数就是配置的,如果他配置为一,那么 我们操作系统的内核始终认为他有足够的内存,直到他用完为止,所以的话呢,他效率会比较低。如果你把这个参数配置为零的话, 那么当操作当我们的若肯去向用户去申请内存的时候,内核呢会去检查他到底有没有这么大的内存空间,所以呢,一般情况下面我们也不用去检查,每一次去申请内存,要去检查的话,性能相当的低。 ok, 如果你把它配置成二的话呢,就是内核禁止任何形式的 过量分配内存,这样的话也没有必要,所以这是我们讲的第一个参数,第二个参数呢,就是这个 swipe 零四等于十啊,这个十是什么意思呢?就是说当系统存在足足够内存的时候,这个时候一般推荐设置为十的话呢,可以去提高性能。 ok, 就是这里面呢,他涉及到一个交换空间,你如果把这个值设置为零的话呢,那内存不足的情况下,面对不对他会使用交换空间。 ok, 如果你把它设置为一的话呢,他会尽量很少的进行交换,如果设置为十的话呢,他就是以性能为优先 默认值了,这个值是六十,我们可以把它设置为十, ok, 然后的话呢,第三个就是 max max com, 这个是个什么东西啊?这个是定义的一个进程他能够拥有最多的一个内存区域 啊,默认值了,一般都是六五五三六,我们可以把它改大一点,就是让我们一个进程呢,可以拥有更多的这样的一个内存区域, ok, 然后还有一个啊厘米题,这个啊厘米题呢,就是文件打开数,因为若可米可它是一个多线程的,所以一般来说我们推荐把文件打开数 把它配高一点,不然的话呢,你同时启动的现成数就会受限制。 ok, 所以这是我们刚才讲的这一个啊,你比题就是一个,就是用户能够打开的这个最大文件数, ok, 然后除了这个基本参数之外,还有一块叫做 nic n i c, 是讲的网卡,我们知道啊,一个 read 的请求,你必须要通过网络通讯,所以呢必定会经过网卡,那么网卡怎么去调 u 呢?这个地方有个非常简单的东西叫做 buff 是什么了?润 buff 就是我们的一个缓冲区,因为大家知道啊,在很多情况下面,我们去进行网络通讯的话呢,他会有一个算法叫做滑动窗口算法,两边都会有缓冲,如果说你的润 buff 比较小的话呢,他会导致你写的时候丢包, 那么大家知道啊,如果你丢包了,业务量丢包了,是不是要重发?所以说业务量过大的话呢,你出现网络丢包的话,他的性能肯定会下降,所以呢我们一般来说会把这一个值改大一点点, 调整一下他的大小,因为他调大一点的话呢,丢包的情况就会有所缓解,所以呢,你在进行 rockin q 发送或者是消费的时候,他的效率要高一点。好,这是我们刚才讲的网卡,那么除了网卡之外,还有一个叫做空呢,空呢是内核,内核的话呢,我们可以让他做中断句核, 什么是中断句?合了?举个简单例子啊,就是你想一下,像我们的这个操作系统,操作系统的话呢,他是不是要去监控一个网卡?比如说我启动一个 soke 的监听,对不对?启动一个 sorry sock 了,我启动端口是八八八八, 那八八八八,那么在这种情况下面这个端口里面我去起了一个八八八八的这样的一个监听,如果有请求来了,我怎么知道这个请求 啊?来了呢?这个时候的话,我们就需要使用中断啊,中断的话呢,就可以去响应对应的请请求。当然啊,我举个例子可能让同学们可以清晰一点,比如说你是一位开发者, 对不对?开发者了,如果说有网络请求来了,他叫做中断,就就相当于是说有产品经理说你的写,你之前写的系统有 bug 啊,有需求要修改了,所以呢,我要给你发一个中断。但是要注意了,你不单纯只是处理 buck, 处理以前的这个需求变动啊,你的部门还会给你分配新的任务,所以的话呢,这个地方就会存在一个问题,你可能每天工作八小时,但是呢,你可能被 中断啊,中断了一百次,那你想一下啊,就是动不动,我工作了两分钟一次,中断来了,我要处理一下,然后呢,我把这一个中断处理完之后,我又过了五分钟中断又来了,那么这一下子的话,你会发现你每天的工作效率很低, 所以的话呢,我们需要把它做一个聚合,什么叫聚合呢?就是说我中断请求一个、两个、三个、四个,我不用每一个都去响应,我等你积累到五个或者积累到十个的时候,我 统一来处理。这就是相当于你跟产品经理说,你不要每收到任何的一个 bug, 或者是收到任何的一个需求,你就来找我, 你把任务积累到五个或者十个的时候,在一起来找我,我集中去响应你的中断,这样的话呢,工作效率会更高。所以呢,对于计算器的底层,对于 cpu, 对于我们的程序来说, 你可以多充半句和效率会更高, ok。 然后呢第二个的话呢,在内核里面,我们可以进行网卡对列的 cpu 绑定, 因为现在主流的网卡基本上他都是支持多队列的啊,因为你网络请求过来的时候要有队列来支持,对不对?那么这样的话呢,我们会把不同的队列分给不同的 cp 核心数来进行处理,这是一种优化的手段啊,那么这个时候我们可以让他进行对应的绑定,就是你不要说这一次你发到网络 请求这个合一,你给的是一个对应的 cpu, 对不对?然后呢这个请求又给了另外的 cpu, 这样的话呢,我们可以去让我们的网卡队列和我们的 cpu 进行绑定的话呢,效率相当来说会高一点。然后呢底下还有一个叫做关闭 lq banners 啊,这个呢其实是主流 cpu, 如果说你去关闭这个班的事的话呢,对你的性能相对来说也会有一定的提高。好,除此之外的话呢,还有一些网络对应的参数啊,比如说像这个 tcp 的 note 的量, 这个漏电的 dna 是什么呢?就是在很多情况下面啊,我们网络层啊,就是要去减少必,就是必须发的这一个封包的数量,对不对?所以的话呢,我们需要去使用这种算法对缓冲区啊,它进行一个自动连接,那么这个漏电 的话呢,可以很大程度上面去提高我们的一个响应。除此之外的话呢,缓冲区的调整也是非常有必要的啊,很多情况下面如果缓冲区调的太小的话,会容易丢包。 ok, 然后最后一个的话呢,就是我们要去调整这一个对列的大小,因为对列 在网络传输他,他的底层,他其实是会决定我们的一个性能啊,包括我们的 sork 的一个对联,我们尽量呢可以把它调大一点。 那么我们总结一下啊,如果说你要完成一个若肯的调优的话,你可以站在 g u m, 还有站在操作系统 g u m 呢,可以去减少 stop the word 的时间优化垃圾回收,站在操作系统有基本的参数调优,有网卡 nic 的调优,有内核很多细致参数的调优。 所以如果你能够站在一个全方位的参数上面进行调优的话,你的 roke me q 啊,可以干到八十万,甚至可以干到单击一百万, ok, 这就是 roke me 的一个全方位的性能调优。