步骤一、找到最耗CPU的进程 工具:top 方法:
图示: 如上图,最耗CPU的进程PID为10765 步骤二:找到最耗CPU的线程 工具:top 方法:
图示: 如上图,进程10765内,最耗CPU的线程PID为10804 步骤三:将线程PID转化为16进制 工具:printf 方法:printf “%x\n” 10804 图示: 如上图,10804对应的16进制是0x2a34,当然,这一步可以用计算器。 之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。 步骤四:查看堆栈,找到线程在干嘛 工具:pstack/jstack/grep 方法:jstack 10765 | grep ‘0x2a34’ -C5 --color
图示: 如上图,找到了耗CPU高的线程对应的线程名称“AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。 希望对经常进行线上CPU问题排查的同学有帮助,如果有更好的实践,也欢迎分享。 |
|