1. 程式人生 > >如何分析最耗CPU的執行緒

如何分析最耗CPU的執行緒

最耗CPU的程序可以通過pidstat命令分析,但執行緒如何分析呢?以下通過尋找最耗CPU的java執行緒為例來說明,希望能拋磚引玉。

 

舉例:找到最耗CPU的java執行緒

ps命令

命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid

結果展示:

 

這個命令的作用,主要是可以獲取到對應一個程序下的執行緒的一些資訊。 比如你想分析一下一個java程序的一些執行瓶頸點,可以通過該命令找到所有當前Thread的佔用CPU的時間,也就是這裡的最後一列。

比如這裡找到了一個TID : 30834 ,所佔用的TIME時間最高。

通過 printf "%x\n" 30834 首先轉化成16進位制, 繼續通過jstack命令dump出當前的jvm程序的堆疊資訊。 通過Grep命令即可以查到對應16進位制的執行緒id資訊,很快就可以找到對應最耗CPU的程式碼塊在哪。

簡單的解釋下,jstack下這一串執行緒資訊內容:

800 nid=0x7d9b waiting on condition [0x0000000046f66000]

"DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]

nid : 對應的linux作業系統下的tid,就是前面轉化的16進位制數字。

tid: 這個應該是jvm的jmm記憶體規範中的唯一地址定位,如果你詳細分析jvm的一些記憶體資料時用得上,我自己還沒到那種程度,所以先放下。