rocketmq的linux服务器参数调整修改
rocketmq的生产环境的linux参数需要修改哪些参数
在生产环境部署 RocketMQ 时,Linux 系统参数的优化是保障其高可用、高吞吐的核心环节。需重点调整内核参数、资源限制、网络参数、内存 /swap 策略 四类,以下是分场景的必改参数及配置说明:
一、核心原则
RocketMQ 对文件句柄、进程线程数、网络缓冲区、内存锁定等敏感,默认 Linux 参数远低于生产要求,需根据集群规模(单节点 / 集群)、消息吞吐(高 / 中 / 低)调整,以下为通用生产级配置(适用于 8C16G 及以上节点)。
二、具体参数修改
1. 系统资源限制(/etc/security/limits.conf)
控制进程的文件句柄、线程数、内存锁定等,需避免 RocketMQ 因资源耗尽崩溃。
ini
# 全局生效(或指定 rocketmq 运行用户,如 rocketmq soft nofile 655350)
* soft nofile 655350 # 软限制:最大打开文件句柄数(默认1024,必改)
* hard nofile 655350 # 硬限制:文件句柄数上限
* soft nproc 655350 # 软限制:最大进程/线程数
* hard nproc 655350
* soft core unlimited # 允许生成 core 文件(故障排查用)
* hard core unlimited
* soft memlock unlimited # 锁定内存(避免堆内存被 swap 换出)
* hard memlock unlimited
- 生效方式:执行
ulimit -a验证,若未生效需重启系统或执行ulimit -n 655350临时生效; - 补充:若使用 systemd 管理 RocketMQ 服务,需在 service 文件中添加
LimitNOFILE=655350LimitNPROC=655350。
2. 内核参数(/etc/sysctl.conf 或 /etc/sysctl.d/rocketmq.conf)
调整网络、内存、文件系统等内核级参数,优化 RocketMQ 网络通信和内存使用。
ini
# ========== 网络参数(核心)==========
net.core.somaxconn = 65535 # 监听队列最大长度(默认128,处理高并发连接)
net.core.netdev_max_backlog = 65535 # 网卡接收队列最大长度(避免丢包)
net.core.rmem_default = 1048576 # 默认TCP接收缓冲区大小
net.core.rmem_max = 16777216 # 最大TCP接收缓冲区(16M)
net.core.wmem_default = 1048576 # 默认TCP发送缓冲区大小
net.core.wmem_max = 16777216 # 最大TCP发送缓冲区(16M)
net.ipv4.tcp_tw_reuse = 1 # 复用TIME_WAIT状态的端口(减少端口耗尽)
net.ipv4.tcp_tw_recycle = 0 # 关闭快速回收(高并发下易丢包,RocketMQ不推荐)
net.ipv4.tcp_syncookies = 1 # 防止SYN洪水攻击
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度(高并发连接)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT超时时间(默认60s,缩短释放端口)
net.ipv4.tcp_keepalive_time = 600 # TCP保活时间(检测无效连接)
net.ipv4.tcp_keepalive_intvl = 30 # 保活探测间隔
net.ipv4.tcp_keepalive_probes = 10 # 保活探测次数
net.ipv4.ip_local_port_range = 1024 65535 # 可用端口范围(避免端口耗尽)
# ========== 内存/swap 策略 ==========
vm.swappiness = 10 # 降低swap使用(默认60,避免内存换出)
vm.max_map_count = 262144 # 最大内存映射区(RocketMQ使用mmap存储CommitLog)
vm.dirty_ratio = 80 # 内存脏页比例(默认20,减少刷盘IO)
vm.dirty_background_ratio = 5 # 后台刷盘脏页比例
# ========== 文件系统 ==========
fs.file-max = 1000000 # 系统级最大文件句柄数
fs.aio-max-nr = 1048576 # 最大AIO请求数(RocketMQ异步刷盘依赖)
- 生效方式:执行
sysctl -p立即生效,重启系统后仍有效; - 验证:
sysctl net.core.somaxconn查看是否生效。
3. 磁盘 IO 优化(可选但推荐)
RocketMQ 对磁盘 IO 敏感(CommitLog/ConsumeQueue 写入),需调整 IO 调度策略和挂载参数:
(1)IO 调度器调整(SSD / 云盘推荐)
bash
运行
# 查看当前调度器:cat /sys/block/{磁盘名}/queue/scheduler
# 改为noop(SSD/云盘)或mq-deadline(机械盘)
echo noop > /sys/block/vda/queue/scheduler
# 永久生效:在/etc/rc.local中添加上述命令(需chmod +x /etc/rc.local)
(2)磁盘挂载参数(/etc/fstab)
ini
# 添加noatime(不记录访问时间)、nodiratime(不记录目录访问时间)
/dev/vda1 /data ext4 defaults,noatime,nodiratime,barrier=0 0 0
- 说明:barrier=0 关闭写屏障(需确保磁盘有 UPS 或云盘快照,提升写入性能)。
4. 关闭透明大页(THP)
THP 会导致 RocketMQ 内存碎片和性能抖动,必须关闭:
bash
运行
# 临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久关闭:在/etc/rc.local中添加上述命令,或修改grub
# CentOS7/8:编辑/etc/default/grub,添加transparent_hugepage=never
# 执行grub2-mkconfig -o /boot/grub2/grub.cfg 生效
三、不同规模集群的参数调整建议
| 集群规模 | 文件句柄(nofile) | somaxconn | max_map_count | swappiness |
|---|---|---|---|---|
| 测试 / 单机 | 65535 | 16384 | 65536 | 10 |
| 生产小规模(<10 节点) | 655350 | 65535 | 262144 | 10 |
| 生产大规模(≥10 节点) | 1000000 | 65535 | 524288 | 5 |
四、验证与监控
- 验证参数:
bash运行
ulimit -n # 查看文件句柄软限制 sysctl -a | grep somaxconn # 查看网络参数 cat /sys/kernel/mm/transparent_hugepage/enabled # 确认THP关闭 - 监控指标:
- 磁盘 IO:
iostat -x 1查看 % util(建议 < 80%); - 内存:
free -m查看 swap 使用(应接近 0); - 端口:
netstat -an | grep TIME_WAIT | wc -l(应 < 10000)。
- 磁盘 IO:
五、注意事项
- 参数需根据服务器配置调整(如低配机器可适当降低 max_map_count);
- 修改内核参数前建议备份配置文件(/etc/sysctl.conf、/etc/security/limits.conf);
- 云服务器需确认部分参数是否受云厂商限制(如 ip_local_port_range);
- RocketMQ 自身参数(如堆内存、刷盘策略)需与系统参数匹配(如 - Xms/Xmx 不超过物理内存的 70%)。
通过以上参数调整,可大幅降低 RocketMQ 生产环境的崩溃、丢包、性能抖动风险,保障高吞吐和高可用。

浙公网安备 33010602011771号