Arthas入門實踐

      網友投稿 1017 2022-05-30

      Arthas是什么?

      在此借用官方的一段話:

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

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

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

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

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

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

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

      Arthas支持JDK 6+,采用命令行交互模式,同時提供豐富的?Tab?自動補全功能,進一步方便進行問題的定位和診斷。

      接下來,話不多說,開始動手實操了

      安裝

      -:maven-central v3.0.5

      https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square

      解壓后目錄如下:

      在此我們著重關注?arthas-boot.jar這個文件,我們可以使用它來啟動?Arthas

      可以直接使用 以下 命令

      wget?https://alibaba.github.io/arthas/arthas-boot.jar

      如果從 github 下載速度比較慢的話推薦 使用 碼云的 鏡像:

      wget?https://arthas.gitee.io/arthas-boot.jar

      除了以上安裝方式,還有兩種安裝方式:

      使用 as.sh 的方式

      全量安裝方式

      具體安裝方式請參考官網,此處不再贅述。

      快速使用

      先啟動官方提供的測試 demo

      java?-jar?arthas-demo.jar

      直接使用以下命令進行啟動:

      java?-jar?arthas-boot.jar

      注意:在 windows 平臺下,直接啟動會報找不到 tools.jar 的錯,從源碼來看是因為此處尋找 tools.jar 沒有從本地配置的 JAVA_HOME 去獲取,而是先去獲取的 JVM 的 tools.jar, 因此需要我們手動指定以下 JAVA_HOME 的目錄,不知道這個算是 bug ,還是有意為之,期待官方以后的解決方案。

      所以 windows 平臺下的命令變成了

      java?-Djava.home="D:\jdk\jre"?-jar?arthas-boot.jar

      -Djava.home?用于指定本地 JAVA_HOME 目錄

      常用命令介紹

      dashboard展示當前進程的信息,按ctrl+c?中斷執行

      12?????AsyncAppender-Work?system????????5?????WAITIN?0?????0:0????false?true5??????Attach?Listener????system????????5?????RUNNAB?0?????0:0????false?true3??????Finalizer??????????system????????8?????WAITIN?0?????0:0????false?true2??????Reference?Handler??system????????10????WAITIN?0?????0:0????false?true4??????Signal?Dispatcher??system????????9?????RUNNAB?0?????0:0????false?true21?????Timer-for-arthas-d?system????????10????RUNNAB?0?????0:0????false?true20?????as-command-execute?system????????10????TIMED_?0?????0:0????false?true14?????job-timeout????????system????????5?????TIMED_?0?????0:0????false?true1??????main???????????????main??????????5?????TIMED_?0?????0:34???false?false15?????nioEventLoopGroup-?system????????10????RUNNAB?0?????0:0????false?falseMemory???????????used??total?max??usage?GC heap?????????????31M???243M???????0.86%?????????????????????2 ps_eden_space????15M???63M????????1.17%?gc.ps_scavenge.time?14 ?????????????????10M???10M???10M????????(ms) ps_old_gen???????5M????169M???????0.18%?gc.ps_marksweep.cou?0 nonheap??????????21M???21M???-1?????????nt Runtime os.name?????????????Windows?10 os.version??????????10.0 java.version????????1.8.0_144 java.home???????????D:\jre systemload.average??-1.00 ID?????NAME???????????????GROUP?????????PRIOR?STATE??%CPU??TIME???INTER?DAEMON

      jad使用該命令 反編譯 class 文件

      $?jad?demo.MathGame jad?demo.MathGame ClassLoader: +-sun.misc.Launcher$AppClassLoader@55f96302 ??+-sun.misc.Launcher$ExtClassLoader@74a14482 Location: /E:/study/tools-study/Arthas/arthas-packaging-3.0.5-bin/arthas-demo.jar /* ?*?Decompiled?with?CFR?0_132.?*/ package?demo;import?java.io.PrintStream;import?java.util.ArrayList;import?java.util.Iterator;import?java.util.List;import?java.util.Random;import?java.util.concurrent.TimeUnit;public?class?MathGame?{ ????private?static?Random?random?=?new?Random(); ????private?int?illegalArgumentCount?=?0; ????public?static?void?main(String[]?args)?throws?InterruptedException?{ ????????MathGame?game?=?new?MathGame();????????do?{????????????game.run(); ????????????TimeUnit.SECONDS.sleep(1L); ????????}?while?(true); ????} ...?...

      thread -n -1 | grep 'main('

      $?thread?-n?-1?|?grep?'main('thread?-n?-1?|?grep?'main(' ????at?demo.MathGame.main(MathGame.java:17)

      方法執行數據觀測,這個命令可以方便的觀察到指定方法的調用情況。能觀察到的范圍為:返回值、拋出異常、入參,通過編寫 OGNL 表達式進行對應變量的查看

      詳細參數說明請參考 官方文檔:?https://alibaba.github.io/arthas/watch.html

      watch 的參數比較多,主要是因為它能在 4 個不同的場景觀察對象

      這里重點要說明的是觀察表達式,觀察表達式的構成主要由 ?ognl 表達式組成,所以你可以這樣寫"{params,returnObj}",只要是一個合法的 ognl 表達式,都能被正常支持。

      Arthas從入門到實踐

      $?watch?demo.MathGame?primeFactors?"{params,returnObj}"?-x?2 Press?Ctrl+C?to?abort. Affect(class-cnt:1?,?method-cnt:1)?cost?in?44?ms. ts=2018-12-03?19:16:51;?[cost=1.280502ms]?result=@ArrayList[ ????@Object[][ ????????@Integer[535629513], ????], ????@ArrayList[ ????????@Integer[3], ????????@Integer[19], ????????@Integer[191], ????????@Integer[49199], ????], ]

      $?watch?demo.MathGame?primeFactors?"{params,returnObj}"?-x?2?-b Press?Ctrl+C?to?abort. Affect(class-cnt:1?,?method-cnt:1)?cost?in?50?ms. ts=2018-12-03?19:23:23;?[cost=0.0353ms]?result=@ArrayList[ ????@Object[][ ????????@Integer[-1077465243], ????], ????null, ]

      $?watch?demo.MathGame?primeFactors?"{params[0],throwExp}"?-e?-x?2 Press?Ctrl+C?to?abort. Affect(class-cnt:1?,?method-cnt:1)?cost?in?62?ms. ts=2018-12-03?19:38:00;?[cost=1.414993ms]?result=@ArrayList[ ????@Integer[-1120397038], ????java.lang.IllegalArgumentException:?number?is:?-1120397038,?need?>=?2 ????at?demo.MathGame.primeFactors(MathGame.java:46) ????at?demo.MathGame.run(MathGame.java:24) ????at?demo.MathGame.main(MathGame.java:16) , ]

      $?watch?demo.MathGame?primeFactors?'{params,?returnObj}'?'#cost>200'?-x?2 Press?Ctrl+C?to?abort. Affect(class-cnt:1?,?method-cnt:1)?cost?in?66?ms. ts=2018-12-03?19:40:28;?[cost=2112.168897ms]?result=@ArrayList[ ????@Object[][ ????????@Integer[2141897465], ????], ????@ArrayList[ ????????@Integer[5], ????????@Integer[428379493], ????], ]

      退出arthas

      如果只是退出當前的連接,可以用quit或者exit命令。Attach到目標進程上的arthas還會繼續運行,端口會保持開放,下次連接時可以直接連接上。

      如果想完全退出arthas,可以執行shutdown命令。

      Java JAR

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:一文搞懂Java的多線程底層邏輯,再也不怕多線程了
      下一篇:深入淺出Sqoop之Java Client API 使用指南
      相關文章
      久久精品国产亚洲av麻豆| 亚洲免费观看视频| 亚洲狠狠狠一区二区三区| 国产精品亚洲一区二区三区在线| 亚洲男人在线无码视频| 高清在线亚洲精品国产二区| 在线91精品亚洲网站精品成人| 亚洲av无码日韩av无码网站冲| 亚洲精品成a人在线观看夫| 亚洲小说图区综合在线| 亚洲人成www在线播放| 亚洲一级毛片视频| 亚洲国产日韩精品| 亚洲精品伦理熟女国产一区二区 | 亚洲中文字幕丝袜制服一区| 国产产在线精品亚洲AAVV| 国产成人亚洲精品蜜芽影院| 亚洲AV中文无码乱人伦在线视色| 亚洲国产人成精品| 国产精品亚洲视频| 国产亚洲一区二区三区在线观看| 亚洲AV无码久久精品色欲| 久久久婷婷五月亚洲97号色| 亚洲经典在线观看| 亚洲制服丝袜中文字幕| 午夜在线a亚洲v天堂网2019| 亚洲欧美不卡高清在线| 国产偷国产偷亚洲高清人| 91麻豆国产自产在线观看亚洲| 国产精品亚洲成在人线| 久久精品国产亚洲av麻豆| 精品亚洲成a人片在线观看 | 亚洲视频免费一区| 亚洲国产精品久久久久秋霞影院| 亚洲丰满熟女一区二区v| 亚洲夂夂婷婷色拍WW47| 亚洲精品色在线网站| 亚洲综合国产精品第一页| 亚洲av无码成人黄网站在线观看| 日产亚洲一区二区三区| 亚洲一区精彩视频|