背景:專案啟動後,日誌突然就不打了,也不輸出異常資訊。
原因:使用@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.在程式碼中一直死迴圈(主方法下)