原文出处: https://www.rabbitmq.com/docs/networking

主要分为操作系统优化与RabbitMQ自身的优化二项

操作系统配置项

最大文件打开描述符

默认为65536, 官方要求最少50K,并同时不建议超过500K允许打开的文件描述符

1
2
3
vi /etc/security/limits.conf
root  -  nofile  465536
*     -  nofile  465536

同时,在修改在最大文件描述符时,这个环境变量ERL_MAX_PORTS也要相应修改

1
2
# 查看修改是否成功
rabbitmqctl eval 'erlang:system_info(port_limit).'

内核参数调整

/etc/sysct.d/90-rabbitmq.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time= 30
net.ipv4.tcp_keepalive_intvl= 10
net.ipv4.tcp_keepalive_probes=  4
net.ipv4.tcp_tw_reuse = 1
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
# TCP Keppalive优化,用于心跳
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 4
net.ipv4.conf.default.rp_filter = 0

RabbitMQ 配置项

Memory

默认为当使用物理服务器的40%的内存时,会进行GC回收。官方说这个值一般无需要修改。但实际环境中,如果是高并发,还是建议修改下。如果允许数据丢失,这个值可以设置更高些,如果对数据一致性要求较高,就保留默认值。

Disk

磁盘空间,默认最小50MB就可以启动RabitMQ,但是在生产环境中,建设设置为物理内存的1.5倍即可

1
{disk_free_limit, {mem_relative, 1.5}}

Networking

面对具有很多客户端连接的场景,RabbitMQ的网络调优是很重要的一件事情。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# RabbitMQ config
tcp_listen_options.backlog = 4096
tcp_listen_options.nodelay = true
# Erlang VM I/O Thread Pool()32-128。4 per CPU
RABBITMQ_IO_THREAD_POOL_SIZE = 32
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = "+A 128"
rabbit.reverse_dns_lookups = false
# 发送缓存与接受缓存的值需要一致。TCP/MQTT/STMP配置项保持一致
# TCP
tcp_listen_options.backlog = 128
tcp_listen_options.nodelay = true
tcp_listen_options.linger.on      = true
tcp_listen_options.linger.timeout = 0
tcp_listen_options.sndbuf  = 32768
tcp_listen_options.recbuf  = 32768

# MQTT
mqtt.tcp_listen_options.backlog = 128
mqtt.tcp_listen_options.nodelay = true
mqtt.tcp_listen_options.linger.on = true
mqtt.tcp_listen_options.linger.timeout = 0
mqtt.tcp_listen_options.sndbuf  = 32768
mqtt.tcp_listen_options.recbuf  = 32768

#STOMP
stomp.tcp_listen_options.backlog = 128
stomp.tcp_listen_options.nodelay = true
stomp.tcp_listen_options.linger.on  = true
stomp.tcp_listen_options.linger.timeout = 0
stomp.tcp_listen_options.sndbuf  = 32768
stomp.tcp_listen_options.recbuf  = 32768

# 统计信息收集间隔,默认为`5000ms`
collect_statistics_interval = 60000 

# 每个连接的通道最大值,官方建议不要超过200.如果超过200,客户端需要优化了
channel_max = 100

查看当前配置

1
rabbitmqctl environment