如果一个线程一直占有着CPU的大量资源,那么一定会导致程序变卡,甚至整个计算机都会卡。那么我们怎么定位到这个线程呢?
接下来我们以linux系统来演示:
1、top命令:检测到你后台进程占用CPU使用和内存的占用情况。
每个进程CPU占用的情况
从结果中我们可以看到第一条结果占用了99.3%的CPU,它的进程(PID)是32655。但是top命令只能定位到进程占用的CPU,不能定位到是哪个具体的线程。
所以我们可以根据PID来获取里面所有的线程占用CPU的情况:
ps H -eo pid , tid, %cpu | grep 32665
2、获取进程里面占用CPU最高的线程(ps H -eo pid , tid, %cpu | grep 32665)
查看32665进程里面所有线程占用CPU的情况
3、通过 jstack 32655(进程ID),获取里面每个线程的具体信息:
jstack 32655:获取进程里面具体线程信息
4、最后一步jstack里面的线程编号是16进制的,所以我们把(ps H -eo pid , tid, %cpu | grep 32665)里面获取的线程编号先进行16进制的换算,然后拿到换算后的值,跟上图的线程编号进行对比,并找到具体的那个线程。