JVM 配置项
RocketMQ 建议使用JDK1.8的最新发布版本,server编译器和8G的堆内存。设置Xms和Xmx值相同,避免JVM反复调整堆内存大小,以此来获得更好的性能。配置如下:
-server -Xms8g -Xmx8g -Xmn4g
-Xmn是JVM中新生代的大小。
如果不关心 RocketMQ broker 的启动时间,预先接触Java堆以确保在JVM初始化期间分配每个页面是更好的选择。配置如下:
-XX:+AlwaysPreTouch
禁用偏向锁可能会减少JVM暂停次数,配置如下:
-XX:-UseBiasedLocking
垃圾回收,推荐使用JDK1.8 的G1 垃圾收集器。推荐如下:
-XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:initatingHeapOccupancyPercent=30
这些GC选项看起来有点激进,但事实证明它在我们的生产环境中具有良好的性能。
-XX:MaxGCPauseMillis的值不能太小,否则JVM会使用很小的年轻代来实现这个目标,这将会导致非常频繁的小GC。推荐滚动输出GC日志,配置如下:
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m
如果写GC文件会增加 broker 的延迟,可以考虑将GC日志文件输出到文件中。配置如下:
-Xloggc:/dev/shm/mq_gc_%p.log