最近接手一位离职同事的工作,
1. 找出CPU飙高的进程
使用TOP
命令查看CPU飙高的进程
通过上图可以看到PID=2132的java进程CPU使用177.2%
2. 查看进程的哪个线程占用CPU比较高
通过第一步我们找到占用CPU较高的进程,第二步就是要找出这个进程下哪些线程占用CPU较高。
使用命令ps -mp {PID} -o THREAD,tid,time
查看指定进程下所有线程活动情况
通过上图发现线程2535和2558分别占用94.0和73.9,并且运行时间都非常长
3. 查看线程的内存信息
我们拿到了进程和线程信息,接下来就可以通过jstack
命令来查看内存信息,查询之前需要先将线程号转为16进制,如2535的16进制值是0x9e7,那就需要拿这个0x9e7去grep一下 jstack 2132|grep 0x9e7 -A 30 -F
通过jstack命令已经非常清晰的发现了问题,翻代码
这里while(true)
无限旋转调用delayQueue.take
方法