1 Arthas(阿爾薩斯) 能為你做什么?
- 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
- 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
- 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
- 是否有一個全局視角來查看系統的運行狀況?
- 有什么辦法可以監控到JVM的實時運行狀態?
- 怎么快速定位應用的熱點,生成火焰圖?
- 怎樣直接從JVM內查找某個類的實例?
2 啟動arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
JAVA -jar arthas-boot.jar
啟動Arthas
3. 查看dashboard
Dashboar圖
Thread 命令圖
4 問題排查
項目正常發布,在測試環境啟動正常,在測試環境機房發布啟動正常,但是到了預發環境機房啟動發現是啟動到一半卡住,現象如下:
服務啟動到一般卡住
第一反應是預發環境的內存不夠導致無法啟動(當時服務器上只剩不到700M內存,去其他機器看該服務正常需要1個G內存),日志輸出卡住,于是調整內存進行發布,結果調整到了1.2g多還是不行. 于是轉換思路,開始排查gconfig和nacos這些在線程狀態中是timewating的狀態.
使用Arthas命令查看thread現場狀態
經過排查這些都是屬于非主線程阻塞.
開始另外換思路, 開始排查主線程中的在運行堆棧信息,由于main線程的id是1, 使用arthas中的 thread 1 命令
至此找到問題點,主線程一直在創建webservice連接卡住,沒有執行其他的任務
解決辦法是進行注釋掉,后重新發布正常。
總結,
- 內存是否足夠 top free -h
- check 啟動日志
- arthas 命令查看threa time out






