JVM参数优化(案例一)

top发现CPU耗时太大进程

Linux, jdk1.8.0_272

JVM堆栈分析得到以下日志(ps -mp PID -o THREAD,time,tid)

syt 0.2 19 - futex_ - - 00:40:58 64568
syt 0.2 19 - futex_ - - 00:40:58 64569
syt 0.2 19 - futex_ - - 00:40:58 64570
syt 0.2 19 - futex_ - - 00:40:58 64571
syt 0.2 19 - futex_ - - 00:40:58 64572
syt 0.2 19 - futex_ - - 00:40:59 64563
syt 0.2 19 - futex_ - - 00:40:59 64567
syt 0.4 19 - futex_ - - 01:10:17 64580
syt 3.4 19 - futex_ - - 09:01:06 64576
syt 3.4 19 - futex_ - - 09:01:06 64577
syt 3.4 19 - futex_ - - 09:01:06 64578
syt 3.4 19 - futex_ - - 09:01:07 64573
syt 3.4 19 - futex_ - - 09:01:07 64574
syt 3.4 19 - futex_ - - 09:01:07 64575

长耗时基本为GC任务“Gang Worker#”,由开启CMS回收器后,新生代的JVM回收线程(jstack PID | grep NID)

"Gang worker#17 (Parallel GC Threads)" os_prio=0 tid=0x00007fefa407b800 nid=0xfc37 runnable

分析GC内存堆情况(jstat -gc PID)

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
32768.0 32768.0 0.0 32768.0 196608.0 22029.3 786432.0 688075.1 57344.0 54481.2 7424.0 6807.1 3889 1587.965 234365 6306.421 7894.387
survivor-0:0/32768
survivor-1:32768/32768
eden:22029/196608
old:688075/786432
metaspace:54481/57344
classcache:6807/7424
YGC:3889次/1587s
FullGC:234365次/6306s
总GC:7894s

分析GC内存空间占比(jstat -gcutil PID)

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 100.00 14.10 87.20 95.01 91.69 3889 1587.965 234367 6306.464 7894.429

初步结论:频繁GC导致CPU耗时过多,探究原因

老年代可能太小,占用超过80%(87%)

-XX:CMSInitiatingOccupancyFraction=80
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseCMSCompactAtFullCollection
老年代达到80%即触发GC,即达到612M/765M即回收,且FullGC时压缩老年代,FullGC次数为234367次,每次都会压缩老年代!!!显然老年代空间太小,查看运行时参数

-Xms1024m -Xmx1024m -Xmn256m -XX:SurvivorRatio=6 -XX:MaxTenuringThreshold=6
总内存:1G
新生代:256m(6+1+1)
老年代:786m
新老晋升:年龄6
理论上需要增大总内存,但可以分析老年代存了什么?

元空间和类缓存可能太小,占用超过80%(95%)

-XX:MetaspaceSize=64M
-XX:MaxMetaspaceSize=256M
理论上元空间初始化大小为64M,其中元空间54M/57M,类缓存6M/7M,已也就是说最大元空间参数没有生效,初始化元空间大小不足以满足应用需要的内存大小,应该设置相等。
元空间每次扩容,都会触发FullGC,说明FullGC次数达到234367次的根源在于,元空间大小不足

建议:
-XX:MetaspaceSize=256M
-XX:MaxMetaspaceSize=256M

结论

元空间大小不足,频繁扩容触发FullGC,而MaxMetaspaceSize指定的大小并未很好生效。频繁FullGC造成CPU飙升

posted @ 2022-04-28 18:34  SArtOnline  阅读(120)  评论(0编辑  收藏  举报