linux的top命令不僅可以看線程的資源占用,還可以看進程下線程的資源占用,結合對應的java命令可以定位到具體有問題的Java代碼,以找出占用CPU最高的線程為例:
第一步: 通過 top命令查找到這個消耗CPU的進程號PID 8958
第二步:使用 top -Hp pid(shift+p 按cpu排序,shift+m 按內存排序)
top -Hp 8958 獲取到這個進程下面所有線程,通過查看%CPU找到最耗費CPU的是線程PID
第三步:使用 printf '%x\n' PID (PID為上一步中獲取到的線程號)轉換成對應的16進制PID 5c7e 。因為jstack中線程號為16進制表示,與top下線程號整數表示不同,所以要轉換。
第四步:使用jstack 獲取對應的線程信息 jstack 8958 | grep 5c7e
8958是一開始獲取的進程號,而5c7e則是這個進程下面最最耗費CPU的線程號。