常用命令: trace -E com.topsoft.aaf.web.controller.outer.v2.authclient.OrganAction getUserSimpleByResCode -v -n 5 '#cost>2000'
原文:https://www.jianshu.com/p/95449939cca3
Arthas
一、簡介
Arthas 是Alibaba開源的Java診斷工具。安裝在系統所在服務器。可以幫助開發人員或者運維人員查找問題,分析性能,bug追蹤。
二、解決什么問題 & 適用場景
解決問題:
1、以全局視角來查看系統的運行狀況、健康狀況。
2、反編譯源碼,查看jvm加載的是否為預期的文件內容。
3、查看某個方法的返回值,參數等等。
4、方法內調用路徑及各方法調用耗時。
5、查看jvm運行狀況。
6、外部.class文件重新加載到jvm里。
等等.....
場景:
1)調用接口時,接口返回異常信息,如果該異常信息沒有清晰的定位到代碼,那么我們通常只能依靠大腦回憶代碼,來估計錯誤發生地了,如果無法估計,一般情況下就會進入測試環境,模擬復現,如果無法復現 _。
2)這個查詢,耗時20s,我們想要分析一下到底是哪些代碼導致的。但是該方法內部又穿插調用了其它業務功能方法,難道手寫System.currentTimeMillis()自己做減運算,還是guava的StopWatch亦或是commons的StopWatch?這幾種方式需要我們手動嵌入代碼,容易遺漏、費力還費時。
等等,就不一一舉例了。
arthas可以為我們解決上述問題,幫助程序員盡早下班,盡早交代。
三、安裝&啟動
啟動: java -jar arthas-boot.jar
[INFO] arthas-boot version: 3.0.5.2 [INFO] Process 6020 already using port 3658 [INFO] Process 6020 already using port 8563 [INFO] Found existing java process, please choose one and hit RETURN. *[1]: 6020 org.apache.catalina.startup.Bootstrap [2]: 16420 org.apache.catalina.startup.Bootstrap [3]: 7833 org.apache.catalina.startup.Bootstrap [4]: 19036 org.apache.catalina.startup.Bootstrap 出現上述命令提示,是因為在這個服務器上,存在4個正在運行的java程序,而序號之后的數字就是pid,我們選取對應的pid,然后回車即可。 [INFO] arthas home: /root/.arthas/lib/3.1.4/arthas [INFO] The target process already listen port 3658, skip attach. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ''--. .--'| '--' | / O \ ' .-' | .-. || '--'.' | | | .--. || .-. |`. `-. | | | || |\ \ | | | | | || | | |.-' | `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' wiki https://alibaba.github.io/arthas tutorials https://alibaba.github.io/arthas/arthas-tutorials version 3.1.4 pid 6020 time 2019-10-14 17:56:41 [arthas@6020]$ 啟動成功!
四、相關命令
僅以主要的幾個命令作為展示,具體命令及參數可以參閱官方文檔。
1)輸入dashboard,回車,儀表盤顯示當前進程相關信息。
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
| ①Thread相關信息 | 線程id 線程名稱 線程組 線程優先級 線程狀態 線程消耗的cpu百分比 運行總時間 線程當前的中斷位狀態 是否守護線程 | ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON | 188 Timer-for-arthas-dashboard-f5864b5b-762a-4fb5-8cc5-65559bd6 system 10 RUNNABLE 19 0:0 false true | 36 pool-1-thread-1 main 5 TIMED_WAITING 5 0:1 false false | 33 Abandoned connection cleanup thread main 5 TIMED_WAITING 0 0:0 false true | 179 AsyncAppender-Worker-arthas-cache.result.AsyncAppender system 9 WAITING 0 0:0 false true | 12 AsyncFileHandlerWriter-225534817 main 5 TIMED_WAITING 0 0:0 false true | 94 Attach Listener system 9 RUNNABLE 0 0:0 false true | 70 ContainerBackgroundProcessor[StandardEngine[Catalina]] main 5 TIMED_WAITING 0 0:0 false true | 34 Druid-ConnectionPool-Create-300669762 main 5 WAITING 0 0:0 false true | 35 Druid-ConnectionPool-Destroy-300669762 main 5 TIMED_WAITING 0 0:0 false true | 3 Finalizer system 8 WAITING 0 0:0 false true | 13 GC Daemon system 2 TIMED_WAITING 0 0:0 false true | 14 NioBlockingSelector.BlockPoller-1 main 5 RUNNABLE 0 0:0 false true | 15 NioBlockingSelector.BlockPoller-2 main 5 RUNNABLE 0 0:0 false true | 2 Reference Handler system 10 WAITING 0 0:0 false true | 4 Signal Dispatcher system 9 RUNNABLE 0 0:0 false true | 76 ajp-nio-38009-Acceptor-0 main 5 RUNNABLE