安裝過程省略,網路上有很多。這裡不再copy,以下環境為win10 --jdk 1.8 --Arthas 3.0.5
遇到的問題
[ERROR] Target process 17272 is not the process using port 3658, you will connect to an unexpected process. [ERROR] If you still want to attach target process 17272, Try to set a different telnet port by using --telnet-port argument. [ERROR] Or try to shutdown the process 13400 using the telnet port first.
提示這個的原因是錯誤使用了 exit退出,之前開啟過程式[3] 埠仍被佔用。如果客戶端無操5分鐘,session過期後,再次登入選擇其它程式也會提示上述錯誤。類似quit。正確退出命令為:shutdown。
使用:http://localhost:8563/ 可以通過web訪問Arthas (客戶端)
與退出有關命令有:
- quit——退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
- shutdown——關閉 Arthas 服務端,所有 Arthas 客戶端全部退出
如上圖可見我本地啟動了兩個程式[3]、 [4] 兩個springboot 專案。接下來帶大家串一下通過Atrhas的命令,我們能得到什麼樣的有用資訊以及能給我們提供哪些判斷依據。
這裡先丟擲一個問題,就是你為什麼要使用arthas,或許是遇到了線上難以定位的問題,又或者其它。帶著問題是看,總是能收穫一個成串的知識鏈。
問題一:這個類從哪個 jar 包載入的?
$ sc
“Search-Class” 的簡寫,這個命令能搜尋出所有已經載入到 JVM 中的 Class 資訊. 對於不熟悉的命令在後面新增-h往往能得到更多有用的資訊。 貼圖僅此一次,後續類似命令不再贅述。
- 模糊匹配
比如命令:sc com.sun.proxy.* 可以將全類名前匹配的類搜尋出來。
- 類詳細資訊
-d 表示: detail
通過code-source能夠得到這個類具體是由哪個jar包載入的。這個在處理鑽石依賴情況,通常可以用到。問題二:我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
$ jad
使用過eclipse 安裝反編譯外掛包的童鞋們可能更瞭解,一下就能記住這個命令。 官方例項:
反編譯出來的原始碼高亮展示,更方便定位程式碼是不是正確的分支,自己程式碼有沒有提交。問題二:遇到問題無法線上上 debug,難道只能通過加日誌再重新發布嗎?
問題三:某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重現!
問題四:是否有一個全域性視角來檢視系統的執行狀況?
$ dashboard
統的實時資料皮膚,請移步閱讀官方文件。
- 主要活躍執行緒列表
- jvm記憶體各區域使用情況以及GC資訊
- 執行環境