问题,在生产环境中,发现很多应用在启动的时候,就会出现几次fullgc,但是在gc.log中并未发现相应的fullgc日志。应用也能正常启动成功。
- 应用分配了4G内存;
- 镜像为openjdk8;
-
jvm参数为:
-Xms2688m
-Xmx2688m
-Xloggc:/**/gc.log
-XX:NewSize=900m
-XX:MaxNewSize=900m
-XX:+UseConcMarkSweepGC
-XX:CMSFullGCsBeforeCompaction=5
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSParallelRemarkEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:+HeapDumpOnOutOfMemoryError
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-verbose:gc
-XX:+PrintClassHistogramBeforeFullGC
-XX:+PrintClassHistogramAfterFullGC
-XX:+PrintCommandLineFlags
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintTenuringDistribution
-XX:+PrintHeapAtGC
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+DisableExplicitGC
-XX:+UseCompressedOops
-XX:+DoEscapeAnalysis
-XX:MaxTenuringThreshold=10
现象:在启动成功后通过jstat查询,多次发现都有4次fullgc,如图所示:
因为应用能成功部署,并正常访问等情况,可以判断发现堆内存等分配都是比较正常,并且gc日志并未找到相关的fullgc日志。
经过度娘和谷歌等,并未找到直接类似的答案,但是注意到openjdk8新增了元空间,而且元空间默认大小为21M,对于一个比较大的应用,空间不足导致fullgc,然后动态扩展了几次,为了验证下猜想,新增了元空间的默认大小设置:-XX:MetaspaceSize=200M,然后部署成功,并jstat查询:

验证了猜想。

本文探讨了在OpenJDK8环境下,应用启动时频繁发生Full GC的现象,尤其是在未记录相应日志的情况下。通过调整元空间大小,解决了这一问题,确保了应用的顺利部署和正常运行。
15万+

被折叠的 条评论
为什么被折叠?



