1、参数调优
-
queue_index_embed_msgs_below:
控制消息的存储位置。是独立存储到msg_store中,还是嵌入消息的索引一并存储。默认值是4096(字节),即小于4KB的消息会嵌入到消息索引中一并存储。**注:**4KB包括消息内容以及消息的属性等元数据信息,其中消息的元数据信息占用至少300字节。配置缺省参数如下:
-
num_acceptors.tcp:
接受TCP侦听器连接的Erlang进程数。Default: 10,这个值直接影响到了另一个值即:connection_max,这个值是在客户端设的,公式如下:最大连接数=connection_max +num_acceptors -1
-
handshake_timeout:
AMQP 0-8/0-9/0-9-1 handshake (在 socket连接和SSL 握手之后)的最大时间, 毫秒为单位.Default: 10000,这边10秒是足够了,不能再长了,再长这个不是网络了,是电话拨号网。
-
vm_memory_high_watermark.relative:
流程控制触发的内存阀值,这个值必须设,设置法则如下:<=16gb内存的机器,设成0.4即MQ最多会使用到16gb*0.4=6.4GB时,阻塞所有的请求,>=32gb内存的机器,设成0.6
-
vm_memory_high_watermark_paging_ratio:
高水位限制的分数,当达到阀值时,队列中消息消息会转移到磁盘上以释放内存。设置机制同vm_memory_high_watermark,只不过它的阀值从0.5~0.6.即当内存的使用达到了50%后,队列开始将消息分页到磁盘。
-
disk_free_limit.absolute:
abbitMQ存储数据分区的可用磁盘空间限制.当可用空间值低于阀值时,流程控制将被触发.此值可根据RAM的总大小来相对设置 (如.{mem_relative, 1.0}).此值也可以设为整数(单位为bytes)或者使用数字单位(如.“50MB”).因此,很多外面都设1GB,这个显然是不够的,因为经如果当RABBITMQ的消息dump可用磁盘还剩1GB时,此时留给你的处理时间已经很短了,一般至少设成10GB。 -
frame_max:
与客户端协商的允许最大frame大小. 设置为0表示无限制,但在某些QPid客户端会引发bug. 设置较大的值可以提高吞吐量;设置一个较小的值可能会提高延迟。
-
initial_frame_max:
咬合客户端的值,如配置文件描述所示:
-
channel_max:
与客户端协商的允许最大chanel大小. 设置为0表示无限制.该数值越大,则broker使用的内存就越高.Default: 0
-
heartbeat:
表示心跳延迟(单位为秒) ,服务器将在connection.tune frame中发送.如果设置为 0, 心跳将被禁用. 客户端可以不用遵循服务器的建议, 查看 AMQP reference 来了解详情. 禁用心跳可以在有大量连接的场景中提高性能,但可能会造成关闭了非活动连接的网络设备上的连接落下.Default: 60 (3.5.5之前的版本是580)
-
hipe_compile:
将此选项设置为true,将会使用HiPE预编译部分RabbitMQ,Erlang的即时编译器.这可以增加服务器吞吐量,但会增加服务器的启动时间.你可以看到花费几分钟延迟启动的成本,就可以带来20-50% 更好性能.这些数字与高度依赖于工作负载和硬件.HiPE 支持可能没有编译进你的Erlang安装中.如果没有的话,启用这个选项,并启动RabbitMQ时,会看到警告消息. 例如, Debian / Ubuntu 用户需要安装erlang-base-hipe 包.HiPE并非在所有平台上都可用,尤其是Windows.在 Erlang/OTP 17.5版本之前,HiPE有明显的问题 . 对于HiPE,使用最新的OTP版本是高度推荐的.Default: false
样例配置:
listeners.tcp.default = 5672
num_acceptors.tcp = 20
handshake_timeout = 10000
vm_memory_high_watermark.relative = 0.4
# vm_memory_high_watermark.absolute = 6GB
vm_memory_calculation_strategy = rss
vm_memory_high_watermark_paging_ratio = 0.5
disk_free_limit.absolute = 10GB
frame_max = 131072
initial_frame_max = 4096
channel_max = 2047
heartbeat = 60
default_vhost = /
hipe_compile = true