在 Linux 上优化 RabbitMQ,通常从 系统层、RabbitMQ 配置、使用方式、监控与容量规划 四个方面入手。下面给你一份比较实用、可落地的优化清单。
RabbitMQ 对连接、队列、文件都很吃 fd。
# 查看当前限制
ulimit -n
# 修改系统限制
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
修改后重新登录或重启。
vim /etc/sysctl.conf
# TCP 连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 队列长度
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
# 内存与 swap
vm.swappiness = 10
sysctl -p
ext4 或 xfsdefaults,noatime,nodiratime
RabbitMQ 是 Erlang 写的,建议:
配置文件位置(新版):
/etc/rabbitmq/rabbitmq.conf
vm_memory_high_watermark.relative = 0.6
或绝对内存:
vm_memory_high_watermark.absolute = 4GB
disk_free_limit.absolute = 5GB
# 单连接最大 channel
channel_max = 2047
# 心跳
heartbeat = 30
# 接受连接数
listener.tcp.backlog = 4096
❌ 不要:
✅ 推荐:
适合消息量大、消费者慢:
rabbitmqctl set_policy Lazy "^lazy-" '{"queue-mode":"lazy"}'
优点:
channel.basicQos(100);
推荐:
TTL + DLX❌ 不要每条消息建连接
✅ 使用:
rabbitmqctl set_policy ha "^ha." '{"ha-mode":"all"}'
⚠️ 注意:镜像队列性能开销大
argument: x-queue-type = quorum
rabbitmq-plugins enable rabbitmq_management
重点监控:
| 问题 | 原因 | 解决 |
|---|---|---|
| 消息延迟大 | prefetch 太小 | 调大 |
| 内存暴涨 | 队列太多 | 合并队列 |
| 磁盘 IO 高 | 持久化过多 | 惰性队列 |
| 连接数爆 | 短连接 | 连接池 |
如果你愿意,可以告诉我:
我可以给你一份 针对你业务的专属优化方案。