最近在查线上应用cpu过高时遇到一个问题,根据线程号追踪发现是gc线程占用大量的cpu。
top -p 7794
top - 15:31:22 up 883 days, 35 min, 1 user, load average: 0.23, 0.37, 0.72
Tasks: 21 total, 0 running, 21 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.1%us, 0.2%sy, 0.0%ni, 95.2%id, 2.4%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 32955440k total, 29792780k used, 3162660k free, 838724k buffers
Swap: 16779884k total, 147720k used, 16632164k free, 9962112k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7815 admin 15 0 7424m 4.7g 9.9m S 1524.4 15.0 0:45.76 java
7794 admin 18 0 7424m 4.7g 9.9m S 0.0 15.0 0:00.00 java
7796 admin 15 0 7424m 4.7g 9.9m S 0.0 15.0 0:05.73 java
7797 admin 16 0 7424m 4.7g 9.9m S 0.0 15.0 2:50.67 java
7798 admin 16 0 7424m 4.7g 9.9m S 0.0 15.0 2:50.52 java
7799 admin 16 0 7424m 4.7g 9.9m S 0.0 15.0 2:51.82 java
7800 admin 16 0 7424m 4.7g 9.9m S 0.0 15.0

线上应用出现CPU使用率过高,通过`top`命令发现`thread VM_GC task thread#0 (ParallelGC)`占用大量CPU资源。`jstack`显示多条`GC task thread`在运行,尽管GC日志显示频率不高,但CPU占用异常。问题包括:1.为何GC线程不断创建且线程号递增,不重用?2.低GC频率下,这些线程如何消耗CPU?
最低0.47元/天 解锁文章
1万+

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



