AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

實戰!使用阿里 Arthas 工具分析 CPU 飆高

來源: 責編: 時間:2023-10-26 17:11:30 264觀看
導讀Arthas是阿里開源的 Java 診斷工具,相比 JDK 內置的診斷工具,要更人性化,并且功能強大,可以實現許多問題的一鍵定位,而且可以一鍵反編譯類查看源碼,甚至是直接進行生產代碼熱修復,實現在一個工具內快速定位和修復問題的一站

Arthas是阿里開源的 Java 診斷工具,相比 JDK 內置的診斷工具,要更人性化,并且功能強大,可以實現許多問題的一鍵定位,而且可以一鍵反編譯類查看源碼,甚至是直接進行生產代碼熱修復,實現在一個工具內快速定位和修復問題的一站式服務。q0528資訊網——每日最新資訊28at.com

今天,我就帶你使用 Arthas 定位一個 CPU 使用高的問題,系統學習下這個工具的使用。q0528資訊網——每日最新資訊28at.com

首先,下載并啟動 Arthas:q0528資訊網——每日最新資訊28at.com

curl -O https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar

啟動后,直接找到我們要排查的 JVM 進程,然后可以看到 Arthas 附加進程成功:q0528資訊網——每日最新資訊28at.com

[INFO] arthas-boot version: 3.1.7[INFO] Found existing java process, please choose one and hit RETURN.* [1]: 12707  [2]: 30724 org.jetbrains.jps.cmdline.Launcher  [3]: 30725 org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication  [4]: 24312 sun.tools.jconsole.JConsole  [5]: 26328 org.jetbrains.jps.cmdline.Launcher  [6]: 24106 orgbeans.lib.profiler.server.ProfilerServer3[INFO] arthas home: /Users/zhuye/.arthas/lib/3.1.7/arthas[INFO] Try to attach process 30725[INFO] Attach process 30725 success.[INFO] arthas-client connect 127.0.0.1 3658  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---. /  O  / |  .--. ''--.  .--'|  '--'  | /  O  / '   .-'|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.|  | |  ||  |/  /    |  |   |  |  |  ||  | |  |.-'    |`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'wiki      https://alibaba.github.io/arthastutorials https://alibaba.github.io/arthas/arthas-tutorialsversion   3.1.7pid       30725time      2020-01-30 15:48:33

輸出 help 命令,可以看到所有支持的命令列表。今天,我們會用到 dashboard、thread、jad、watchognl 命令,來定位這個 HighCPUApplication 進程。你可以通過官方文檔:https://arthas.aliyun.com/doc/commands.html,查看這些命令的完整介紹:q0528資訊網——每日最新資訊28at.com

圖片圖片q0528資訊網——每日最新資訊28at.com

dashboard 命令用于整體展示進程所有線程、內存、GC 等情況,其輸出如下:q0528資訊網——每日最新資訊28at.com

圖片圖片q0528資訊網——每日最新資訊28at.com

可以看到,CPU 高并不是 GC 引起的,占用 CPU 較多的線程有 8 個,其中 7 個是 ForkJoinPool.commonPool。q0528資訊網——每日最新資訊28at.com

ForkJoinPool.commonPool 是并行流默認使用的線程池。q0528資訊網——每日最新資訊28at.com

所以,此次 CPU 高的問題,應該出現在某段并行流的代碼上。q0528資訊網——每日最新資訊28at.com

接下來,要查看最繁忙的線程在執行的線程棧,可以使用 thread -n 命令。這里,我們查看下最忙的 8 個線程:q0528資訊網——每日最新資訊28at.com

thread -n 8

輸出如下:q0528資訊網——每日最新資訊28at.com

圖片圖片q0528資訊網——每日最新資訊28at.com

可以看到,由于這些線程都在處理 MD5 的操作,所以占用了大量 CPU 資源。我們希望分析出代碼中哪些邏輯可能會執行這個操作,所以需要從方法棧上找出我們自己寫的類,并重點關注。q0528資訊網——每日最新資訊28at.com

由于主線程也參與了 ForkJoinPool 的任務處理,因此我們可以通過主線程的??吹叫枰攸c關注 org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication 類的 doTask 方法。q0528資訊網——每日最新資訊28at.com

接下來,使用 jad 命令直接對 HighCPUApplication 類反編譯:q0528資訊網——每日最新資訊28at.com

jad org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication

可以看到,調用路徑是 main->task()->doTask(),當 doTask 方法接收到的 int 參數等于某個常量的時候,會進行 1 萬次的 MD5 操作,這就是耗費 CPU 的來源。那么,這個魔法值到底是多少呢?q0528資訊網——每日最新資訊28at.com

圖片圖片q0528資訊網——每日最新資訊28at.com

你可能想到了,通過 jad 命令繼續查看 User 類即可。這里因為是 Demo,所以我沒有給出很復雜的邏輯。在業務邏輯很復雜的代碼中,判斷邏輯不可能這么直白,我們可能還需要分析出 doTask 的“慢”會慢在什么入參上。q0528資訊網——每日最新資訊28at.com

這時,我們可以使用 watch 命令來觀察方法入參。如下命令,表示需要監控耗時超過 100 毫秒的 doTask 方法的入參,并且輸出入參,展開 2 層入參參數:q0528資訊網——每日最新資訊28at.com

watch org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.HighCPUApplication doTask '{params}' '#cost>100' -x 2

可以看到,所有耗時較久的 doTask 方法的入參都是 0,意味著 User.ADMN_ID 常量應該是 0。q0528資訊網——每日最新資訊28at.com

圖片圖片q0528資訊網——每日最新資訊28at.com

最后,我們使用 ognl 命令來運行一個表達式,直接查詢 User 類的 ADMIN_ID 靜態字段來驗證是不是這樣,得到的結果果然是 0:q0528資訊網——每日最新資訊28at.com

[arthas@31126]$ ognl '@org.geekbang.time.commonmistakes.troubleshootingtools.highcpu.User@ADMIN_ID'@Integer[0]

需要額外說明的是,由于 monitor、trace、watch 等命令是通過字節碼增強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,因此診斷結束要執行 shutdown 來還原類或方法字節碼,然后退出 Arthas。q0528資訊網——每日最新資訊28at.com

在這個案例中,我們通過 Arthas 工具排查了高 CPU 的問題:q0528資訊網——每日最新資訊28at.com

  • 首先,通過 dashboard + thread 命令,基本可以在幾秒鐘內一鍵定位問題,找出消耗 CPU 最多的線程和方法棧;
  • 然后,直接 jad 反編譯相關代碼,來確認根因;
  • 此外,如果調用入參不明確的話,可以使用 watch 觀察方法入參,并根據方法執行時間來過濾慢請求的入參。

可見,使用 Arthas 來定位生產問題根本用不著原始代碼,也用不著通過增加日志來幫助我們分析入參,一個工具即可完成定位問題、分析問題的全套流程。q0528資訊網——每日最新資訊28at.com

對于應用故障分析,除了阿里 Arthas 之外,還可以關注去哪兒的Bistoury :https://github.com/qunarcorp/bistoury工具,其提供了可視化界面,并且可以針對多臺機器進行管理,甚至提供了在線斷點調試等功能,模擬 IDE 的調試體驗。q0528資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15212-0.html實戰!使用阿里 Arthas 工具分析 CPU 飆高

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 嵌入式框架設計中的四種常用模式

下一篇: Vue 3.3.6 發布,得益于WeakMap,它更快了

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了“本地生活”入口,位置較深,位于首頁的“充值中心”內,目前主要售賣美食相關的
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁“充值中心”入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,“7
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
Top