線程狀態(tài)及stack dump分析

線程的幾種狀態(tài)及狀態(tài)之間的轉(zhuǎn)換下面這張圖描述的很清晰:


線程狀態(tài)轉(zhuǎn)換(圖片來源于網(wǎng)絡(luò))

另外推薦大家一篇文章,這篇文章寫的非常不錯,有興趣的也可以關(guān)注下他的公眾號:hollischuang
Java命令學習系列(二)——Jstack

下面說下如何根據(jù)stack dump分析系統(tǒng)問題:
1)找到應(yīng)用的pid,命令:ps -ef | grep <keyword>
示例:ps -ef | grep tomcat


2)打印stack dump到本地,命令:jstack -l <pid> > <filename>
示例:jstack -l 15469 >jstack.log


3)通過pid,找到該進程下所有的線程信息,命令:top -Hp <pid>
示例:top -Hp 15469

4)觀察第三步界面上的進程信息,隨便挑選一個pid,然后將這個pid轉(zhuǎn)成16進制的??梢栽陔娔X上打開計算機->程序員 選擇十進制,輸入pid,然后在選擇十六進制,換算成十六進制:

5)打開第二步打印的stack dump,檢索第四步中的十六進制pid(所有大寫變小寫),命令less,grep

6)到此就能把服務(wù)器上看到的進程id和線程dump的信息映射起來了,剩下的就需要我們對線程自身的了解、對自己應(yīng)用的了解以及JVM的GC線程等等。
觀察線程的運行情況,比如某一個線程占中CPU很高,那可能就有死鎖了。通過stock dump的分析還可以看出線程是不是卡死在某些外部資源上了。

下次碰到實際的問題時再補充下根據(jù)stack dump找到問題原因的例子……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容