RocketMQ JVM/Linux 配置
这是配置RocketMQ代理JVM / OS参数的介绍。 它指出了在部署RocketMQ集群之前应该考虑的某些特定配置。
JVM Options
推荐使用JDK 1.8的最新发布版本,包含服务器编译器和8g堆。 设置相同的Xms和Xmx值,以防止JVM调整堆的大小以获得更好的性能。 一个简单的JVM配置如下所示:
-server -Xms8g -Xmx8g -Xmn4g
如果您不关心RocketMQ代理的启动时间,请预先Java堆以确保在JVM初始化期间分配每个页面是更好的选择。 那些不关心启动时间的人可以启用它:
-XX:+AlwaysPreTouch
禁用偏置锁(biased )定可能会减少JVM暂停:
-XX:-UseBiasedLocking
至于垃圾收集,建议使用JDK 1.8的G1收集器:
-XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30
这些GC选项看起来有点激进,但在我们的生产环境中证明它有很好的性能。
不要为-XX:MaxGCPauseMillis设置一个太小的值,否则JVM会使用一个年轻的小辈来实现这个目标,这会导致非常频繁的次要GC。
并建议使用滚动GC日志文件:
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m
如果写入GC文件会增加代理的延迟,请考虑将GC日志文件重定向到内存文件系统:
-Xloggc:/dev/shm/mq_gc_%p.log
Linux 内核参数
有一个os.sh脚本列出了文件夹bin中的许多内核参数,可以用于生产使用,只需稍作更改。 下面的参数需要注意,更多的细节请参考/ proc / sys / vm / * [1]的文档。
vm.extra_free_kbytes, 告诉VM在后台回收(kswapd)启动的阈值和直接回收(通过分配进程)启动的阈值之间保留额外的空闲内存。RocketMQ使用此参数来避免内存分配中的高延迟。
vm.min_free_kbytes, 如果将此设置为低于1024KB,则系统将变得微妙破碎,并且在高负载下容易出现死锁。
vm.max_map_count, 限制进程可能具有的最大内存映射区域数量。 RocketMQ将使用mmap来加载CommitLog和ConsumeQueue,所以建议为这个参数设置一个更大的值。
vm.swappiness, 定义内核将交换内存页的程度。 较高的值会增加攻击性,较低的值会降低交换量。 10这个值,以避免交换延迟建议。
File descriptor limits, RocketMQ需要为文件(CommitLog和ConsumeQueue)和网络连接打开文件描述符。 我们建议为文件描述符设置655350。
Disk scheduler, RocketMQ推荐使用最后期限的I/O调度程序,它将为请求[2]提供有保证的延迟。