jdk11 zgc进程coredump解决(针对大内存的zgc参数设置)

背景

某线上服务,使用的机器配置:cpu64核、内存384G

为了减少gc带来的影响,使用了jdk11+zgc,其中jvm堆配置为301G,详细的jvm参数配置如下:

/usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -server -Djava.awt.headless=true -Dsun.reflect.inflationThreshold=2147483647 -Xms301G -Xmx301G -Xss512k -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=256m -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:ConcGCThreads=19 -XX:ParallelGCThreads=44 -XX:ZCollectionInterval=120 -XX:ZAllocationSpikeTolerance=5 -XX:+UnlockDiagnosticVMOptions -XX:-ZProactive -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+ExplicitGCInvokesConcurrent -XX:-OmitStackTraceInFastThrow -XX:AutoBoxCacheMax=20000 -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xlog:gc*=info,safepoint,gc+heap=trace:file=/data/applogs/heap_trace.txt:t,u,level,tags:filecount=5,filesize=100M -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/HeapDumpOnOutOfMemoryError -Djava.util.Arrays.useLegacyMergeSort=true -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Duser.region=CN -Djava.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

线上稳定运行一段时间后,随着流量增加,jvm进程常常coredump(jvm进程突然崩溃)

将进程重启后,过一段时间(大约1天   ~几天)又会出现coredump

1. max_map_count参数修改

进程coredump后,生成了下面的tomcat日志:

jdk11 zgc进程coredump解决(针对大内存的zgc参数设置)

需要将系统参数 /proc/sys/vm/max_map_count 修改为655300,参考:https://cloud.tencent.com/developer/news/840984

jdk11 zgc进程coredump解决(针对大内存的zgc参数设置)

2. ZMarkStacksMax参数修改

部分进程coredump后,也生成了如下的日志:

jdk11 zgc进程coredump解决(针对大内存的zgc参数设置)

增加gc参数:-XX:ZMarkStacksMax=20480M,参考:https://cloud.tencent.com/developer/news/840984

临时调大该参数可缓解

jdk11 zgc进程coredump解决(针对大内存的zgc参数设置)

总结

经过上面2个参数调整后,进程coredump不再发生了。

对于使用jdk11的zgc来讲,如果进程设置的堆空间比较大(超过100G),强烈提议设置上面2个参数

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容