如果一個線程一直占有著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進制的換算,然后拿到換算后的值,跟上圖的線程編號進行對比,并找到具體的那個線程。