问题现象
cgi服务无法处理请求,cpu偶尔飙高。
问题排查记录
查看调用栈
首先jstack 查看进程的当前调用栈,发现很多线程处于Blocked状态。
jstack pid > stack.txt
查看gc情况
cpu偶尔飙升,怀疑是gc导致 stop the world,使用jstat查询gc的频率
jstat -gcutil pid 1000 100
可以发现,系统确实在频繁发生full gc
各列数据含义:
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时
查看jvm内存占用情况
那么来看看为什么会频繁发生full gc呢,看看jvm的堆内存占用情况
jmap -heap pid