jvm内存调优参数详解,附RocketMQ默认内存调优设置

Posted HelloWorld搬运工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm内存调优参数详解,附RocketMQ默认内存调优设置相关的知识,希望对你有一定的参考价值。

-Xms:初始堆大小,默认值物理内存的1/64(<1GB),默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.

-Xmx:最大堆大小,默认值物理内存的1/4(<1GB),默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制

-Xmn:年轻代大小(1.4orlator),注意:此处的大小是(eden+ 2 survivor space).jmap -heap中显示的New gen是不同的。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

XX:MetaspaceSize orXX:PermSize:设置持久代(perm gen)初始值,默认值物理内存的1/64MetaspaceSizejdk1.8后的设置,PermSizejdk1.7之前的设置。

-XX:MaxMetaspaceSize or-XX:MaxPermSize:设置持久代最大值,默认值物理内存的1/4MetaspaceSizejdk1.8后的设置,PermSizejdk1.7之前的设置。

-XX:+UseConcMarkSweepGC使用CMS内存收集,

-XX:+UseCMSCompactAtFullCollection:FULL GC的时候,对年老代压缩。CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片

-XX:CMSInitiatingOccupancyFraction=70:使用cms作为垃圾回收,使用70%后开始CMS收集

-XX:+CMSParallelRemarkEnabled降低标记停顿

-XX:SoftRefLRUPolicyMSPerMB每兆堆空闲空间中SoftReference的存活时间

-XX:+CMSClassUnloadingEnabled当使用CMS垃圾收集器时,允许类卸载。这个选项模式是开启的。为了禁止类卸载,那么可以使用: -XX:-CMSClassUnloadingEnabled

-XX:SurvivorRatioEden区与Survivor区的大小比值

-XX:-UseParNewGC设置年轻代为并行收集,可与CMS收集同时使用JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值

-verbose:gc在虚拟机发生内存回收时在输出设备显示信息,格式如下: [Full GC 256K->160K(124096K), 0.0042708 secs] 该参数用来监视虚拟机内存回收的情况。

-Xloggc:把相关日志信息记录到文件以便分析.

-XX:+PrintGCDetails打印gc详细信息

-XX:+UseG1GC使用G1内存收集,jdk1.7.4以后使用

-XX:G1HeapRegionSize:当使用G1收集器时,设置java堆被分割的大小。这个大小范围在1M32M之间。

-XX:NumberOfGCLogFiles:设置滚动日志文件的个数,必须大于1

-XX:GCLogFileSize:设置滚动日志文件的大小,必须大于8k

-XX:-OmitStackTraceInFastThrow:强制要求JVM始终抛出含堆栈的异常

-XX:MaxDirectMemorySize:DirectByteBuffer分配的堆外内存到达指定大小后,即触发Full GC

-XX:-UseLargePagesLinux下使用大页

-XX:-UseBiasedLocking启用偏向锁,JDK 5update 6后引入,但需要手动启用, JDK6默认启用。

 

RocketMQ jvm内存默认配置:

runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

JAVA_OPTS="${JAVA_OPTS} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection-XX:CMSInitiatingOccupancyFraction=70

-XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0-XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 

-XX:-UseParNewGC"

JAVA_OPTS="${JAVA_OPTS} -verbose:gc -Xloggc:/usr/share/apache-stock-market-hk/hk_gc.log-XX:+PrintGCDetails"

JAVA_OPTS="${JAVA_OPTS} -XX:-OmitStackTraceInFastThrow"

JAVA_OPTS="${JAVA_OPTS} -XX:-UseLargePages"

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}"

 

runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=32m-XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30-XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"

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:MaxDirectMemorySize=1024m"

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}"


以上是关于jvm内存调优参数详解,附RocketMQ默认内存调优设置的主要内容,如果未能解决你的问题,请参考以下文章

JVM参数调优详解

JVM参数调优详解

JVM参数调优

JVM调优参数整理

高并发编程系列:JVM性能调优的6大步骤,及关键调优参数详解

直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解