在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Arthas -- 一款釋放潛力的神器

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-07-05 11:21 ? 次閱讀

大家好,我是Yuan,今天給大家介紹一款調優神器 -- 阿里巴巴Arthas,可以幫助你的應用釋放潛力。

1. 介紹

阿里巴巴 Arthas 是一個診斷工具,可以用于監視、分析和解決 Java 應用程序的問題。使用 Arthas 的一個主要優點是,我們不需要修改代碼,甚至不需要重新啟動我們想要監視的 Java 服務。

在本教程中,我們將首先安裝 Arthas,在此之后,通過一個簡單的案例來演示 Arthas 的一些關鍵特性。

最后,由于 Arthas 是用 Java 編寫的,因此它是跨平臺的,可以在 Linux、macOS 和 Windows 上運行。

2. 下載和入門

首先,我們可以通過直接下載鏈接或使用curl來下載 Arthas 庫:

curl-Ohttps://alibaba.github.io/arthas/arthas-boot.jar

現在,讓我們通過運行帶有-h(幫助)選項的 Arthas 來測試它是否工作:

java-jararthas-boot.jar-h

如果成功,我們應該看到顯示所有命令的幫助指南:

9732543c-1a78-11ee-962d-dac502259ad0.png

3. 案例分析

在本教程中,我們將使用一個非常簡單的應用程序,基于利用遞歸實現的斐波那契數列的相對低效的實現方式:

publicclassFibonacciGenerator{

publicstaticvoidmain(String[]args){
System.out.println("按任意鍵繼續");
System.in.read();
for(inti=0;i100;i++){
longresult=fibonacci(i);
System.out.println(format("fib(%d):%d",i,result));
}
}

publicstaticlongfibonacci(intn){
if(n==0||n==1){
return1L;
}else{
returnfibonacci(n-1)+fibonacci(n-2);
}
}
}

這個示例的最有趣的部分是遵循斐波那契數列的數學定義的 fibonacci 方法。

在 main 方法中,我們使用一個循環和相對較大的數字,以便讓計算機進行較長時間的計算。這當然正是我們想要的,以便演示 Arthas。

4. 啟動 Arthas

現在讓我們試試 Arthas!我們需要做的第一件事是運行我們的小型斐波那契應用程序。我們可以使用我們喜歡的 IDE 或直接在終端中運行它。它會要求按下一個鍵才能啟動。我們將在將進程附加到 Arthas 之后按下任意鍵。

現在,讓我們運行 Arthas 可執行文件:

java-jararthas-boot.jar

Arthas 提示選擇要附加到的進程:

[INFO]arthas-bootversion:3.1.7
[INFO]Foundexistingjavaprocess,pleasechooseoneandhitRETURN.
*[1]:25500com.baeldung.arthas.FibonacciGenerator
...

讓我們選擇名稱為 com.baeldung.arthas.FibonacciGenerator 的進程。在此示例中,只需在列表中輸入數字‘1’并按 Enter 即可。

Arthas 現在會附加到該進程并啟動:

[INFO]Trytoattachprocess25500
[INFO]Attachprocess25500success.
...

一旦 Arthas 啟動,我們就有一個提示符,可以發出不同的命令。

我們可以使用 help 命令獲取有關可用選項的更多信息。為了方便使用 Arthas,我們還可以使用 tab 鍵來自動完成其命令。

在將 Arthas 附加到進程后,我們現在可以按下一個鍵,程序將開始打印斐波那契數。

5. 儀表盤

一旦 Arthas 啟動,我們可以使用儀表盤。在這種情況下,我們通過輸入 "dashboard" 命令來使用儀表盤。現在,我們可以看到一個詳細的屏幕,其中包含多個面板和關于我們的 Java 進程的許多信息:

97484792-1a78-11ee-962d-dac502259ad0.png

讓我們更詳細地看一下其中的一些內容:

  • 頂部區域專門顯示當前正在運行的線程
  • 一個重要的列是每個線程的 CPU 使用情況
  • 第三部分顯示每個線程的 CPU 時間
  • 另一個有趣的面板是內存分析。不同的內存區域以及它們的統計信息都列在其中。在右側,我們有垃圾收集器的信息
  • 最后,在第五部分,我們有關于主機平臺和 JVM 的信息

我們可以通過按下 "q" 鍵退出儀表盤。

我們應該記住,即使退出,Arthas 仍會附加到我們的進程上。因此,為了正確地從我們的進程中斷開它的連接,我們需要運行 "stop" 命令。

6. 分析堆棧跟蹤

在儀表盤中,我們看到我們的主進程占用了幾乎 100% 的 CPU。該進程的 ID 是 1,在第一列中可以看到。

現在我們已經退出了儀表盤,我們可以通過運行 "thread" 命令來更詳細地分析該進程:

thread1

作為參數傳遞的數字是線程 ID。Arthas 打印出一個堆棧跟蹤信息,其中充斥著對 fibonacci 方法的調用。

如果堆棧跟蹤信息很長而且難以閱讀,可以使用 "thread" 命令結合 "grep" 命令來過濾:

thread1|grep'main('

這將只打印與 "grep" 命令匹配的行:

[arthas@25500]$thread1|grep'main('
atcom.baeldung.arthas.FibonacciGenerator.main(FibonacciGenerator.java:10)

7. 反編譯Java類

假設我們正在分析一個我們對其中了解甚少或一無所知的Java應用程序,突然發現堆棧中充斥著以下類型的重復調用:

[arthas@59816]$thread1
"main"Id=1RUNNABLE
atapp//com.baeldung.arthas.FibonacciGenerator.fibonacci(FibonacciGenerator.java:18)
atapp//com.baeldung.arthas.FibonacciGenerator.fibonacci(FibonacciGenerator.java:18)
...

由于我們運行了Arthas,我們可以反編譯一個類來查看其內容。為了實現這一點,我們可以使用jad命令,將限定類名作為參數傳遞:

jadcom.baeldung.arthas.FibonacciGenerator

類加載器:
+-jdk.internal.loader.ClassLoaders$AppClassLoader@799f7e29
+-jdk.internal.loader.ClassLoaders$PlatformClassLoader@60f1dd34

位置:
/home/amoreno/work/baeldung/tutorials/libraries-3/target/
/*
*反編譯使用CFR。
*/
packagecom.baeldung.arthas;

importjava.io.IOException;
importjava.io.InputStream;
importjava.io.PrintStream;

publicclassFibonacciGenerator{
publicstaticvoidmain(String[]arrstring)throwsIOException{

輸出是反編譯的Java類和一些有用的元數據,如類的位置。這是一個非常有用和強大的功能。

8. 搜索類和搜索方法

搜索類命令在搜索JVM中加載的類時非常方便。我們可以使用它通過輸入sc并將模式作為參數傳遞來使用,帶或不帶通配符:

[arthas@70099]$sc*Fibonacci*
com.baeldung.arthas.FibonacciGenerator
Affect(row-cnt:1)costin5ms.

一旦我們獲得了類的限定名稱,我們可以使用兩個附加標志來查找更多信息:

  • -d顯示類的詳細信息
  • -f顯示類的字段

然而,類的字段必須與詳細信息一起查詢:

[arthas@70099]$sc-dfcom.baeldung.arthas.FibonacciGenerator
class-infocom.baeldung.arthas.FibonacciGenerator
...

同樣,我們可以使用sm(搜索方法)命令來查找類中加載的方法。在這種情況下,對于我們的類com.baeldung.arthas.FibonacciGenerator,我們可以運行:

[arthas@70099]$smcom.baeldung.arthas.FibonacciGenerator
com.baeldung.arthas.FibonacciGenerator()V
com.baeldung.arthas.FibonacciGeneratormain([Ljava/lang/String;)V
com.baeldung.arthas.FibonacciGeneratorfibonacci(I)J
Affect(row-cnt:3)costin4ms.

我們可以使用-d標志來檢索方法的詳細信息。最后,我們可以傳遞方法的名稱作為可選參數,以縮小返回方法的數量:

sm-dcom.baeldung.arthas.FibonacciGeneratorfibonacci
declaring-classcom.baeldung.arthas.FibonacciGenerator
method-namefibonacci
modifierpublic,static
annotation
parametersint
returnlong
exceptions
classLoaderHash799f7e29

9. 監視方法調用

我們可以使用Arthas來監視方法,這在調試應用程序的性能問題時非常方便。為此,我們可以使用monitor命令。

monitor命令需要一個-c <秒數>標志和兩個參數 - 限定類名和方法名。

對于我們的案例研究,讓我們來調用monitor:

monitor-c10com.baeldung.arthas.FibonacciGeneratorfibonacci

正如我們所預期的,Arthas將每10秒打印有關fibonacci方法的指標:

Affect(class-cnt:1,method-cnt:1)costin47ms.
timestampclassmethodtotalsuccessfailavg-rt(ms)fail-rate
-----------------------------------------------------------------------------------------------------------------------------
2020-03-071126com.baeldung.arthas.FibonacciGeneratorfibonacci52895752895700.070.00%
...

對于那些最終失敗的調用,我們也有指標 - 這對于調試很有用。

10. 監控方法參數

如果我們需要調試方法的參數,我們可以使用watch命令。但是,語法會稍微復雜一些:

watchcom.baeldung.arthas.FibonacciGeneratorfibonacci'{params[0],returnObj}''params[0]>10'-n10

讓我們詳細看一下各個參數:

  • 第一個參數是類名
  • 第二個參數是方法名
  • 第三個參數是定義我們要查看的內容的OGNL表達式 - 在這種情況下,它是第一個(也是唯一的)方法參數和返回值
  • 第四個和最后一個可選參數是用于過濾我們要監視的調用的布爾表達式

對于此示例,我們只想在參數大于10時監視。最后,我們添加一個標志來限制結果為10個:

watchcom.baeldung.arthas.FibonacciGeneratorfibonacci'{params[0],returnObj}''params[0]>10'-n10
按Q或Ctrl+C中斷。
Affect(class-cnt:1,method-cnt:1)costin19ms.
ts=2020-02-172108;[cost=30.165211ms]result=@ArrayList[
@Integer[11],
@Long[144],
]
ts=2020-02-172108;[cost=50.405506ms]result=@ArrayList[
@Integer[12],
@Long[233],
]
...

在這里,我們可以看到帶有CPU時間和輸入/返回值的調用示例。

11. 分析器

對于那些對應用程序性能感興趣的人來說,通過分析器命令提供了一種非常直觀的能力。分析器將評估我們的進程正在使用的CPU的性能。

讓我們通過運行profiler start來啟動分析器。這是一個非阻塞的任務,意味著在分析器工作時我們可以繼續使用Arthas。

隨時可以通過運行profiler getSamples來詢問分析器有多少個樣本。

現在讓我們使用profiler stop來停止分析器。此時,一個FlameGraph圖像將被保存。在這個具體的案例中,我們有一個以斐波那契線程為主導的圖表:

9760ec8e-1a78-11ee-962d-dac502259ad0.png

注意,當我們想要檢測我們的CPU時間花在哪里時,這個圖表特別有用。

12. 總結

在本教程中,我們探索了Arthas的一些最強大和有用的功能。

正如我們所見,Arthas有許多命令可以幫助我們診斷各種問題。當我們無法訪問正在審查的應用程序的代碼,或者我們想快速診斷在服務器上運行的有問題的應用程序時,它也可以特別有幫助。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2976

    瀏覽量

    105214
  • 阿里巴巴
    +關注

    關注

    7

    文章

    1622

    瀏覽量

    47571
  • 應用程序
    +關注

    關注

    38

    文章

    3296

    瀏覽量

    57946
收藏 人收藏

    評論

    相關推薦

    免費又好用的PCB參數計算神器——Saturn PCB Toolkit

    今天給大家分享一款免費又好用的PCB 參數計算神器——Saturn PCB Toolkit。
    發表于 01-03 13:51 ?3w次閱讀

    共模電容:又一款EMC濾波神器?|深圳比創達電子(上)

    共模電容:又一款EMC濾波神器?(上)相信不少人是有疑問的,今天深圳市比創達電子科技有限公司就跟大家解答下! 傳統共模濾波器的局限性通常我們討論EMC問題中的噪聲及干擾,多是共模噪聲、共模干擾
    發表于 12-25 10:53

    開發了一款車燈驅動神器

    最近公司開發了一款車燈用的是 QX6103。QX6103是一款高精度降壓型大功率LED恒流驅動芯片。適用于輸入電壓100V以內的大功率LED恒流驅動電源。專利的高端電流檢測、固定頻率、電流模PWM
    發表于 05-12 14:29

    分享一款2016好評如潮的diy設計神器

    `作為個學了兩年室內設計專業的人,今天給大家發個福利說實話我專業學的并不是很好,但是我肯鉆。平時也喜歡逛些學術類的貼吧論壇。前兩天無意在豆瓣上看到個非常牛逼的設計神器這款
    發表于 05-25 12:12

    麻煩推薦一款AD,用來處理濱松的一款TDI CCD

    麻煩推薦一款AD,用來處理濱松的一款TDI CCD,不勝感激!
    發表于 08-02 06:39

    MCU430AFE253讀寫神器

    MCU430AFE253讀寫神器
    發表于 09-19 13:07

    釋放下一代車輛的無限潛力

    支持。DisplayPort視頻流傳輸· 我們與Bitec合作展示了一款由低功耗萊迪思CertusPro-NX FPGA以及Bitec DisplayPort TX和RX IP組成的演示,可以將視頻流從
    發表于 02-21 13:40

    一款“改裝神器”將會如何開拓全球智能家居的市場

    隨著智能家居概念的普及,越來越多的人想將自己的家改造成智能家庭。但智能電器價格普遍偏高,如何用低成本的方式快速體驗智能家居的便利呢? 于是,一款堪稱傳統電器的改裝神器 智能通斷器誕生了! 有人會問
    的頭像 發表于 11-06 10:59 ?1907次閱讀

    介紹一款關于自拍神器器的單片機MCU解決方案

    好幾樣自拍神器的回憶,神器迭代的速度在加快,不變的是每代自拍神器都會被每代年輕人奉為潮的
    發表于 12-07 15:18 ?839次閱讀

    Arthas可以解決哪些問題

    診斷利器 Arthas,是阿里的一款開源工具。Github-alibaba/arthas 上可以看到它的介紹
    的頭像 發表于 12-24 14:22 ?818次閱讀

    推薦一款我私藏已久的串口示波神器

    大家好,我是小麥,實不相瞞,關于串口示波器軟件的文章,我之前寫過期了,具體可以看這個項目《個超贊的開源串口虛擬示波器項目,玩起來!》。這是一款開源的Qt庫,非常簡單,容易上手,還能二次...
    發表于 12-20 19:09 ?1次下載
    推薦<b class='flag-5'>一款</b>我私藏已久的串口示波<b class='flag-5'>神器</b>

    智慧醫療BI助你釋放醫療大數據的潛力

    思邁特Smartbi可以幫你釋放醫療大數據潛力,下面是Smartbi的智慧醫療BI系統。
    發表于 04-12 16:27 ?840次閱讀
    智慧醫療BI助你<b class='flag-5'>釋放</b>醫療大數據的<b class='flag-5'>潛力</b>

    釋放所有閃存陣列的全部潛力

    電子發燒友網站提供《釋放所有閃存陣列的全部潛力.pdf》資料免費下載
    發表于 08-30 11:05 ?0次下載
    <b class='flag-5'>釋放</b>所有閃存陣列的全部<b class='flag-5'>潛力</b>

    共模電容:又一款EMC濾波神器

    共模電容:又一款EMC濾波神器?|深圳比創達電子(上)
    的頭像 發表于 12-25 10:54 ?820次閱讀
    共模電容:又<b class='flag-5'>一款</b>EMC濾波<b class='flag-5'>神器</b>?

    介紹一款基于java的滲透測試神器-CobaltStrike

    Cobalt Strike是一款基于java的滲透測試神器,常被業界人稱為CS神器
    的頭像 發表于 01-16 09:16 ?1091次閱讀
    介紹<b class='flag-5'>一款</b>基于java的滲透測試<b class='flag-5'>神器</b>-CobaltStrike
    主站蜘蛛池模板: 中文字幕一区二区三区精彩视频 | 亚洲电影天堂网 | 免费在线观看理论片 | 欧美一级视频免费看 | 操欧美女人 | 日本3级视频 | 久青草国产高清在线视频 | 波多野结衣在线免费视频 | 都市禁忌猎艳风流美妇 | 天天碰免费视频 | 久久草在线观看 | 91午夜在线观看 | 丁香六月激情综合 | 老头天天吃我奶躁我的动图 | 在线网站你懂 | 手机看片1024在线观看 | 狠狠色丁香婷婷综合最新地址 | 国产三级日本三级美三级 | 正在播放羽月希与黑人bd在线 | 成人网在线 | 九九精品影院 | www.激情.com| 人人射人人爽 | 午夜高清免费观看视频 | 欧美宗合网 | 国产伦精品一区二区三区女 | 天堂福利视频在线观看 | 亚洲色图综合 | 人人玩人人弄人人曰 | 经典三级一区二区三区视频 | 日韩黄页 | 天天舔天天 | 在线播放你懂 | 色综合久久88色综合天天 | 97色婷婷成人综合在线观看 | 色惰网站 | 国产无限资源 | 熟妇毛片| 手机看片自拍自自拍日韩免费 | 欧美性黑人十极品hd | 亚洲网站一区 |