1、CPU使用率原因
CPU使用率高的原因有:
1、频繁的IO操作
2、线程里死循环打印
3、频繁的full gc(一般是old空间不够)
一般除了计算密集型外,基本都是死循环(死锁或者while(true))导致的。
4、多次序列化反序列化
2、问题排查步骤
1、top 找出cpu高的java进程号xxx
2、top -H -p xxx
可以显示该进程的所有线程的资源消耗情况,找出cpu消耗时间消耗最多的java线程id,假如为yyy,这里yyy是用十进制表示的,需要转换为十六进制,可以使用计算器或者printf "%x\n" yyy命令,假如转换后线程id为zzz
3、jstack yyy >> aaaa.txt
将该线程堆栈信息导入这个文件,然后文件中查询相应的线程id,文件中的线程id是十六进制的,需要用转化好的去查询。然后尝试定位出现问题的代码
如果直接使用jstack 线程id出现错我Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can be used when the target process is not responding
,则说明这个java进程的pid文件删除了。
为什么会被删除呢?这是因为linux操作系统为了防止/tmp目录文件过多,有个删除管理机制:tmpwatch