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/64。MetaspaceSize为jdk1.8后的设置,PermSize为jdk1.7之前的设置。
-XX:MaxMetaspaceSize or-XX:MaxPermSize:设置持久代最大值,默认值物理内存的1/4。MetaspaceSize为jdk1.8后的设置,PermSize为jdk1.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:SurvivorRatio:Eden区与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堆被分割的大小。这个大小范围在1M到32M之间。
-XX:NumberOfGCLogFiles:设置滚动日志文件的个数,必须大于1
-XX:GCLogFileSize:设置滚动日志文件的大小,必须大于8k
-XX:-OmitStackTraceInFastThrow:强制要求JVM始终抛出含堆栈的异常
-XX:MaxDirectMemorySize:当DirectByteBuffer分配的堆外内存到达指定大小后,即触发Full GC
-XX:-UseLargePages:在Linux下使用大页
-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默认内存调优设置的主要内容,如果未能解决你的问题,请参考以下文章