java線上排查利器arthas


當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  1. 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?

  2. 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?

  3. 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?

  4. 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!

  5. 是否有一個全局視角來查看系統的運行狀況?

  6. 有什么辦法可以監控到JVM的實時運行狀態?

Arthas是Alibaba開源的java在線診斷工具,采用命令行交互模式,可以方便的在線診斷排查、熱修改代碼,侵入小,提供了豐富的功能,是排查jvm相關問題的利器。

Arthas官方文檔

下載啟動

       下載arthas-boot.jar並拷貝到服務器上,在cmd命令行窗口運行java -jar arthas-boot.jar來啟動即可,非常的方便。
       啟動過程中要注意:需要先配置jre的環境變量才能使用java命令(或者直接進到jre的bin目錄下啟動);一般來說arthas會自動檢測到當前正在運行的java進程讓你選擇進行attach,但是有些情況下會出現讓你輸入pid的現象,這時只需打開任務管理器找到要查看的tomcat進程的pid(可以右鍵打開文件所在的位置來更加准確的判斷哪個是需要分析的tomcat進程)。還有些服務器環境是沒有外網權限的,啟動過程就會出現下載相應jar失敗的問題,有兩種解決辦法,一是在有外網權限的機器上(如開發者自己的機器)在C:\Users\Administrator.arthas將lib包拷貝到服務器同樣的目錄下,或者下載全量的arthas-packaging,里面已經包含啟動arthas所需的jar包。

       輸入中括號里里面的數字選擇你想要attach的java進程,后面的1716、8656等是java進程的PID,最后打印下面這樣的信息說明啟動成功。
在這里插入圖片描述

  • 瀏覽器下使用Arthas
           Arthas目前支持Web Console,用戶在attach成功之后,可以直接訪問:http://127.0.0.1:8563/,也可以連接其他服務器上的arthas(注意防火牆)。

  • 退出Arthas

           如果只是退出當前的連接,可以用quit或者exit命令。Attach到目標進程上的arthas還會繼續運行,端口會保持開放,下次連接時可以直接連接上。如果想完全退出arthas,可以執行shutdown命令。
           如果出現以下問題,說明已經attach到另外一個java進程,進入已經連接的進程后執行shutdown退出即可(exit命令只是退出,arthas還在后台運行)。
    在這里插入圖片描述

常用命令

arthas支持的命令十分豐富,具體可以查閱官方文檔,下面是我經常用到的命令。

dashboard

輸入dashboard,會展示當前進程的信息和JVM的內存使用情況,按ctrl+c可以中斷執行。
在排查JVM內存使用和如CPU占用過高這類的問題時很有幫助。
在這里插入圖片描述

thread

可以查詢展示當前最忙的前N個線程並打印堆棧:
在這里插入圖片描述

watch

這個是我認為最強大的一個功能,對於排查問題非常的有幫助。
watch能方便的觀察到指定方法的調用情況,可以查看入參的值、類的靜態變量信息和方法返回值等等,對於定位問題非常方便。
在這里插入圖片描述
如圖,可以查看addOrUpdateWorker方法的入參worker的值。- x 2代表打印結果的遍歷深度,默認是1.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM