原文出处: 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
|