Jstack
-
使用jps查找出java進程的pid,如7777
或 ps -ef | grep java -
使用top -p 7777觀察進程情況,然後Shift+h,顯示該進程的所有線程。
-
找出CPU消耗較多的線程id,如7788,將7788轉換爲16進制0x1e6c,注意是小寫。
-
使用jstack 7777 | grep -A 10 0x1e6c 來查詢出具體的線程狀態。
-A 10表示查找到所在行的後10行
Arthas
當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
-
這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?
-
我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?
-
遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
-
線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
-
是否有一個全局視角來查看系統的運行狀況?
-
有什麼辦法可以監控到JVM的實時運行狀態?
使用
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
常見指令
-
dashboard
實時查看應用監控數據
-
thread
查看應用程序中所有線程情況
thread threadId命令查看指定線程狀態信息
thread -n {n} 打印最忙的n個線程的信息
trace -
trace 類 方法
查看每個步驟耗時
-
stack
stack 類 方法
輸出當前方法被調用的調用路徑
-
watch
方便的觀察到指定方法的調用情況。能觀察到的範圍爲:返回值、拋出異常、入參,通過編寫 OGNL 表達式進行對應變量的查看。
Ref
- Arthas 官方文檔 https://alibaba.github.io/arthas/