收到服务器报警,服务端的一个java服务占用cpu200%多。该服务里面跑了很多线程,于是想找到是谁引起的。
1、首先dump出该进程的所有线程及状态
使用命令 jstack PID 命令打印出CPU占用过高进程的线程栈.
jstack -l5683>5683.stack
2、使用top命令找到耗cpu的线程
使用top -H -p PID 命令查看对应进程是哪个线程占用CPU过高.
3. 将线程的pid 转成16进制,比如5729 = 0x1661
到第一步dump出来的 5683.stack 里面找0x1661 就知道是哪个线程了
经过查找,是服务线程比较忙,初步解决方法就是加大服务线程数。