CPU升上去会降下来是正常的,一直不降就是有问题
一、CPU占用过高故障排查
1、用top命令查看,定位进程,获取进程ID->pid
2、用top -Hp pid 查看进程里每个线程的CPU占用量,获取占CPU最多的那个线程的ID,转为16进制,得到操作系统线程的ID
3、再通过jstack -l pid打印线程堆栈,然后查找上述线程id的线程执行情况,进而找到代码
二、排查高并发导致的CPU占用过高
这种情况下,CPU一般不会太高,而是每个线程都有一定的升高,属于正常现象,这个时候的解决办法就是水平拓展负载均衡。
三、排查GC导致CPU占用过高
在这种情况下,通过上述的步骤排查,会发现该进程内有部分线程CPU占用过高,其他线程一般,这部分占用过高的线程就是GC线程。表明此时GC非常频繁,这个时候就要 去看GC的设置情况,采用优化GC的方式来缓解这个问题。
用jstat -gcutil -1000 5000 去看gc的情况