jstack判斷執行緒狀態

WXY_WXY發表於2024-07-23

背景:專案啟動後,日誌突然就不打了,也不輸出異常資訊。

原因:使用@PostConstruct初始化某個方法,在該方法裡,一直while迴圈了。

1.jstack的作用:

》列印執行緒的堆疊跟蹤

解釋 jstack -l 輸出

  • 執行緒列表:輸出首先列出所有執行緒的名稱和狀態(如RUNNABLE, WAITING, BLOCKED等)。

  • 執行緒ID:每個執行緒的ID,通常以十六進位制格式顯示。

  • 鎖資訊:如果執行緒處於BLOCKED狀態,會顯示它正在等待的鎖的詳細資訊。

  • 堆疊跟蹤:每個執行緒的堆疊跟蹤顯示了執行緒在執行時呼叫的方法和行號。

  • 死鎖檢測:

    • jstack -l 還會檢測並報告死鎖情況。
    • 輸出中會包含“Found one Java-level deadlock”或“Found no deadlocks”等資訊。
  • 鎖的詳細資訊:

    • 顯示每個執行緒持有的鎖和正在等待的鎖。
    • 鎖資訊包括鎖的型別(如輕量級鎖、重量級鎖等)和鎖的持有者。

2.jstack的使用

jstack -l 程序號

windows下:D:\JDK\bin,對應jdk的bin目錄

3.在程式碼中一直死迴圈(主方法下)

相關文章