项目场景:
开发环境使用的是jdk8,而生产环境应为其他项目需求,调整OpenJDK版本为OpenJDK11,启动配置如下
#JAVA GC PRINT
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintHeapAtGC
-XX:+UseGCLogFileRotation
-XX:+HeapDumpOn0utOfMemoryError
-Xloggc:$LOG DIR/gc.log
-XX:NumberofGCLogFiles=5
-XX:GCLogFileSize=5M
-XX:HeapDumpPath=$LOG DIR/HeapDumpOnOutOfMemoryError/"
#JAVA VM -Xmn2g
-server -D64
-Xmx512M
-Xms512M
-XX:SurvivorRatio=8
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:ParallelCMSThreads=4
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFul.Collection
-XX:CMSFulIGCsBeforeCompaction=1
-XX:CMSInitiating0ccupancyFraction=72
-XX:+UseCMSInitiatingOccupancyOnly
问题描述
Unrecognized VM option 'ExplicitGCInvokesConcurrentAndUnloadsClassesDid you mean '(+/-)ExplicitGCInvokesConcurrent'? Error: Could not create the Java Virtual Machine.
原因分析:
CMS 垃圾回收器于 JDK1.5 时期推出,在 JDK9 中被废弃,在 JDK14 中被移除。 而用来替换 CMS 垃圾回收器的便是我们常说的 G1 垃圾回收器。
解决方案:
- 更换OpenJDK版本为JDK9以下
- 调整启动配置GC参数,调整VM配置
//修改日志输出参数JAVA_GC_PRINT
LOG_DIR=./logs
-Xlog:gc -Xlog:gc:file=$LOG DIR/gc.log
// JAVA_VM
-server -D64
-Xmx512M
-Xms512M
-XX:MaxDirectMemorysize=256m
-XX:+UseG1GC
-XX:+UseCompressedOops
-XX:+UseCompressedClassPointers
-XX:+SegmentedcodeCache
-verbose:gc
-XX:+PrintCommandLineFlags
-XX:+ExplicitGCInvokesConcurrent