一、OS内核参数

(1)vm.overcommit_memory
Linux内存分配策略,可选值为0、1、2,默认为0.

  • 0:表示内核将检查是否有足够的可用内存供应用进程使用,如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用程序。
  • 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
  • 2:表示内核允许分配超过所有物理内存和交换空间总和的内存。

将vm.overcommit_memory设置为1.
编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效。

(2)vm.max_map_count
这个参数的值会影响中间件系统可以开启的线程的数量,默认是65535,建议把这个值调大10倍,也就是655350.
编辑/etc/sysctl.conf ,改vm.max_map_count=655350,然后sysctl -p使配置文件生效。

(3)vm.swappiness
控制进程的swap行为,OS会把一部分磁盘空间作为swap区域,如果有的进程现在可能不是太活跃,就会被OS把进程调整为休眠状态,把进程中的数据放入磁盘上的swap区域,然后让这个进程把原来占用的内存空间腾出来,交给其他活跃运行的进程来使用。

如果把这个参数的值设置为0,表示尽量别把任何一个进程放到磁盘swap区域,尽量大家都使用物理内存。
如果把这个参数的值设置为100,表示尽量把一些进程放到磁盘swap区域去,内存腾出来给活跃的进程使用。
默认情况下为60,可能会导致中间件运行不活跃的时候被腾出内存空间,放到磁盘swap区域中。
建议设置vm.swappiness=10,尽量多的使用物理内存。

编辑/etc/sysctl.conf ,改vm.swappiness=10,然后sysctl -p使配置文件生效。

(4)ulimit
用于控制Linux最大文件链接数,默认值为1024,一般情况下是不够的,会导致程序抛出:too many open files的错误。可以调大该值,比如调大到65535。

编辑/etc/profile ,改ulimit -n 65535,然后source /etc/profile 使配置文件生效。

二、JVM参数

打开runbroker.sh脚本,可以看到下面的JVM配置信息。

#=====================================================================================
# JVM Configuration
#=====================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

默认情况下broker采用G1内存回收器,默认堆内存大小为8GB,可以根据服务器的实际情况来调整内存大小。

三、RocketMQ核心参数

打开apache-rocketmq/conf/dledger下的broker-*.conf配置文件,可以看到
sendMessageThreadPoolNums=16
用于配置RocketMQ内部发送消息的线程池的线程数量,默认是16,可以根据服务器CPU核数进行调整,比如CPU是24核的,那么可以调整为24。

打赏
支付宝 微信
上一篇 下一篇