RabbitMQ性能参数优化
说明
一般情况下,RabbitMQ 的默认配置就足够了。
如果希望特殊设置的话,有两个途径:
一个是环境变量的配置文件 rabbitmq-env.conf
一个是配置信息的配置文件 rabbitmq.config
注意,这两个文件默认是没有的,如果需要必须自己创建。
在/etc/rabbitmq/
目录下创建,重启后生效。
避免流控机制触发
- 服务端默认配置是当内存使用达到
40%
,磁盘空闲空间小于50M
,即启动内存报警,磁盘报警;报警后服务端触发流控(flowcontrol)机制。 - 一般地,当发布端发送消息速度快于订阅端消费消息的速度时,队列中堆积了大量的消息,导致报警,就会触发流控机制。
- 触发流控机制后,RabbitMQ 服务端接收发布来的消息会变慢,使得进入队列的消息减少;
- 与此同时 RabbitMQ 服务端的消息推送也会受到极大的影响,测试发现,服务端推送消息的频率会大幅下降,等待下一次推送的时间,有时等 1 分钟,有时 5 分钟,甚至 30 分钟。
- 一旦触发流控,将导致 RabbitMQ 服务端性能恶化,推送消息也会变得非常缓慢;
- 因此要做好数据设计,使得发送速率和接收速率保持平衡,而不至于引起服务器堆积大量消息,进而引发流控。通过增加服务器集群节点,增加消费者,来避免流控发生,治标不治本,而且成本高。
- 服务器单节点,单网卡全双工情况下,测试发现发布速度过快,压满发布 PC 机带宽,对于服务器来说,下行(接收)带宽也会压满,可是上行(转发递送)带宽却出现了明显的下降,似乎有一个争抢。这可能是导致触发流控的原因。
三种模式
三种模式 direct
fanout
topic
,不同的模式对于新建交换机、新建队列、绑定等操作性能影响不大,但是在 direct 模式下明显消息发布的性能比其他模式强很多,并且消息发送到相同队列比发送到不同队列性能稍好。
参数调优
1 | vm_memory_high_watermark |
官方配置示例
拷贝官方配置示例,修改部分参数即可。
1 | ## This example configuration file demonstrates various settings |