0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

使用Arthas火焰圖工具的Java應(yīng)用性能分析和優(yōu)化經(jīng)驗

OSC開源社區(qū) ? 來源:阿里云開發(fā)者 ? 2024-10-28 09:27 ? 次閱讀

以下文章來源于阿里云開發(fā)者,作者譽銘

導(dǎo)讀

分享作者在使用Arthas火焰圖工具進行Java應(yīng)用性能分析和優(yōu)化的經(jīng)驗。

看到標(biāo)題是不是很多人在想是不是標(biāo)題黨了,是也不是~,請聽我細細道來~

我們的應(yīng)用代碼是用Java寫的,因此使用的火焰圖工具是Arthas,下面的分析也是基于此。

Arthas火焰圖使用

啟動火焰圖分析


$ profiler start
Started [cpu] profiling

停止


$ profiler stop --format flamegraph
profiler output file: /tmp/test/arthas-output/20211207-111550.html
OK

如上所示默認會生成一個html的火焰圖文件,指定輸出格式相關(guān)可參考官方文檔。

火焰圖示例

0bfa336a-9409-11ef-a511-92fbcf53809c.png

火焰圖橫軸代表CPU的占用時間,橫軸越寬代表CPU占用越多,鼠標(biāo)移動上去也可以看到這個方法究竟占用了多少CPU。

縱軸代表調(diào)用棧,火焰越高代表調(diào)用棧越深。

其中綠色部分代表Java代碼,黃色部分代表JVM C++代碼,橙色部分代表內(nèi)核態(tài)C語言代碼,紅色代表用戶態(tài)C語言代碼。

如何分析火焰圖(附實戰(zhàn))

事情是這樣的,我們的業(yè)務(wù)簡單來說就是監(jiān)聽發(fā)貨消息后執(zhí)行一系列操作,分自動和批量兩種方式,批量的大用戶進行業(yè)務(wù)操作時,會同時有幾萬單、十幾萬單的產(chǎn)生,相當(dāng)于大促時的流量了,因此cpu占用總是有尖刺,有時單機甚至能到80+%。而且日常流量時感覺cpu占用和流量數(shù)據(jù)相比也有些偏高,因此決定使用火焰圖分析下。

從上往下看

下面采用兩個在優(yōu)化過程中比較典型的兩個案例。

案例一

0c164d16-9409-11ef-a511-92fbcf53809c.png

火焰圖分析最簡單的方式就是找大平頂,如果一個方法占用比較耗時、調(diào)用次數(shù)很多,那么他的橫軸一定是比較寬的,體現(xiàn)到火焰圖上就是一個大平頂。

圖中紅框是業(yè)務(wù)代碼的執(zhí)行,其中藍框是初步定位到的耗時操作,點開后可以看到左側(cè)是sentinel采樣CPU占用,占用總CPU3%~4%,這部分應(yīng)該是不會隨流量上升而升高的, 這次就先沒有動這塊。第二塊是在metaq的消費者代碼里執(zhí)行的,因此重點關(guān)注,因為我們的應(yīng)用是消息驅(qū)動的,接受tp的發(fā)貨消息后進行對應(yīng)的操作,metaq流量升高,這部分對應(yīng)的操作大概率也是會隨之升高的。

0c1b55f4-9409-11ef-a511-92fbcf53809c.png

0c33415a-9409-11ef-a511-92fbcf53809c.png

占總CPU占用達到了驚人的9.3%。 點開后可以看到是脫敏工具,其對性能的影響幾乎和發(fā)貨消息齊平了,排查后發(fā)現(xiàn)是我們部門內(nèi)部使用的鏈路采集工具,在采集metaq消息時會對消息進行脫敏處理,脫敏工具會對姓名、郵箱、手機號等分別進行正則匹配,而我們接收的交易消息中是包含整個訂單信息的,這個對象是很大的(包含擴展字段等諸多信息),對其使用正則進行脫敏工作量巨大。正常情況下使用此工具采集線上流量對性能影響不是很大,但是在我們的場景影響有點出乎意料...... 由于我們平時基本不會在鏈路圖上關(guān)注消息的內(nèi)容,一般都是用來看HSF鏈路,因此直接把dp對metaq的采集關(guān)閉了。

案例二

0c38d2a0-9409-11ef-a511-92fbcf53809c.png

0c689134-9409-11ef-a511-92fbcf53809c.png

0c88e9ac-9409-11ef-a511-92fbcf53809c.png

使用全局搜索后居然占用了將近6%的CPU,這可是日常的流量下截取的火焰圖,系統(tǒng)流量升高時占用比例會更大。 點開后可以看到是進行HSF調(diào)用的時候,獲取Java調(diào)用棧比較耗時,之前寫代碼的時候懷疑過獲取調(diào)用棧會比較耗性能,但沒想到居然比一次HSF調(diào)用本身的耗時都大了。這個地方之前是為了獲取調(diào)用來源,打印到日志中方便排查問題的(歷史代碼),后續(xù)將HSF的調(diào)用日志改成了通過HSF Filter的方式,去掉了獲取調(diào)用棧的邏輯。 其實案例二我一開始不是從上往下看定位到的,因為調(diào)用HSF的地方不止一個,每個耗時其實也不長,整體看的話從上往下還是比較難發(fā)現(xiàn)的。

從下往上看

案例二

如果從上往下看效果不明顯,可以從我們系統(tǒng)主要流量入口處進行分析,從下面入口一步步往上點,也可以發(fā)現(xiàn)問題,帶著懷疑的態(tài)度來找,上述的案例二我一開始并沒有注意到上方的問題,我是一步步從消息入口看,然后點到上面發(fā)現(xiàn)的這個調(diào)用消耗居然比HSF多的。

0c8c56d2-9409-11ef-a511-92fbcf53809c.png

可以看到這個調(diào)用不是集中在一個地方的,細看每個地方都有調(diào)用,所以整體對性能的影響才那么大。 全局搜索后可以看到到處都有調(diào)用(圖示紫色部分)。

0c91cdba-9409-11ef-a511-92fbcf53809c.png

從下往上找更適合細化的時候,專門對某個鏈路進行分析優(yōu)化。

優(yōu)化效果

下面來讓我們計算一下數(shù)據(jù),來看看樓主是不是標(biāo)題黨了。

0c98511c-9409-11ef-a511-92fbcf53809c.png

整體大致優(yōu)化了5~6%左右(7月份的時候,機器數(shù)量是30臺,8月縮容到了27臺),取5%,其中系統(tǒng)CPU占用在6.5%左右,從日常流量上來看,用戶態(tài)cpu從26%到21%,下降19%+,考慮縮容的關(guān)系,20%的優(yōu)化大抵是有的。 由于這是日常流量的優(yōu)化結(jié)果,大促流量突增時,系統(tǒng)負載降低應(yīng)該會更明顯,優(yōu)化后大用戶批量操作時瞬時流量也基本不會有機器cpu占用超過60%了。 后續(xù)雙十一壓測也會繼續(xù)關(guān)注優(yōu)化,流量上升后更多問題可能就會暴露出來。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10810

    瀏覽量

    210878
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2952

    瀏覽量

    104493
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4726

    瀏覽量

    68248

原文標(biāo)題:我是如何通過火焰圖分析讓應(yīng)用CPU占用下降近20%的

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    OpenHarmony之開機優(yōu)化

    OpenHarmony已經(jīng)支持了Bootchart工具,我們可以直接使用Bootchart工具,Bootchart工具介紹如下: 概述 Bootchart是一個用于系統(tǒng)啟動過程性能
    發(fā)表于 07-01 16:39

    高薪聘JAVA工程師

    ; 2、深入理解業(yè)務(wù)需求,分析和發(fā)現(xiàn)系統(tǒng)的優(yōu)化點,負責(zé)推動產(chǎn)品性能和架構(gòu)優(yōu)化; 3、對所負責(zé)系統(tǒng)進行規(guī)劃,并結(jié)合項目不斷優(yōu)化和升級,提高
    發(fā)表于 05-27 16:23

    詳解java代碼優(yōu)化方法

    性能下降,JDK7之后,可以使用ThreadLocalRandom來獲取隨機數(shù)44. 靜態(tài)類、單例類、工廠類將它們的構(gòu)造函數(shù)置為private以上是常用的Java代碼優(yōu)化方法,在Java
    發(fā)表于 04-02 15:43

    針對于Java的35 個代碼性能優(yōu)化總結(jié)

    針對于Java的35 個代碼性能優(yōu)化總結(jié) 前言代碼優(yōu)化,一個很重要的課題??赡苡行┤擞X得沒用,一些細小的地方有什么好修改的,改與不改對于代碼的運行效率有什么影響呢?這個問題我是這么考慮
    發(fā)表于 06-19 21:03

    具有特殊應(yīng)用性能的模擬開關(guān)有什么優(yōu)點

    隨著市場對功能豐富的手機需求越來越強勁,具有特殊應(yīng)用性能的模擬開關(guān)得到了最終設(shè)計的持續(xù)青睞。此舉不僅能降低材料成本(BOM),還有助于提升設(shè)計性能并滿足對產(chǎn)品上市時間的要求。本文將通過若干實際用例
    發(fā)表于 07-16 06:21

    嵌入式Java虛擬機的性能優(yōu)化技術(shù)

    ——JMO+(JMOplus)的性能優(yōu)化技術(shù)。 在過去的幾年里,Java已經(jīng)在各個領(lǐng)域得到了廣泛的應(yīng)用,尤其是無線移動領(lǐng)域,全球180多個移動運營商已經(jīng)推出了Java下載服務(wù)。無線手持
    發(fā)表于 07-18 06:26

    關(guān)于java性能優(yōu)化的一些細節(jié)

    優(yōu)化。此舉能夠使性能平均提高50% 。2、盡量重用對象特別是String對象的使用,出現(xiàn)字符串連接時應(yīng)該使用StringBuilder/StringBuffer代替。由于Java虛擬機不僅要花時間生成
    發(fā)表于 10-11 09:23

    Arm高性能計算工具試用分析

    全球排名前20的超級計算機用戶中有70%使用Arm工具來快速理解應(yīng)用程序性能,并通過調(diào)試、分析優(yōu)化更快地獲得結(jié)果努力。
    發(fā)表于 08-02 09:51

    【技術(shù)視界】鴻蒙開發(fā)套件之DevEco Profiler助您輕松分析應(yīng)用性能問題

    作者:shizhengtao,華為性能調(diào)優(yōu)工具專家 應(yīng)用的性能優(yōu)化一直以來都是開發(fā)者所面臨的一大難題,在2023HDC大會上全新亮相的HarmonyOS NEXT開發(fā)者預(yù)覽版,其中鴻蒙
    發(fā)表于 09-15 15:55

    JAVA教程之圖片火焰效果

    JAVA教程之圖片火焰效果,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:14 ?5次下載

    Arthas可以解決哪些問題

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

    技術(shù)速遞 | Java Agent場景性能測試分析優(yōu)化經(jīng)驗分享

    能力產(chǎn)生一定的性能影響,作為一個基于Java Agent技術(shù)做服務(wù)治理的框架,我們需要在保證服務(wù)治理能力生效的同時,極小的影響微服務(wù)原有的服務(wù)性能。 雖然基于Java Agent的服務(wù)
    的頭像 發(fā)表于 03-25 07:55 ?652次閱讀

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

    阿里巴巴 Arthas 是一個診斷工具,可以用于監(jiān)視、分析和解決 Java 應(yīng)用程序的問題。使用 Arthas 的一個主要優(yōu)點是,我們不需要
    的頭像 發(fā)表于 07-05 11:21 ?517次閱讀
    <b class='flag-5'>Arthas</b> -- 一款釋放潛力的神器

    【技術(shù)視界】鴻蒙開發(fā)套件之DevEco Profiler助您輕松分析應(yīng)用性能問題

    的是華為性能調(diào)優(yōu)工具專家的分享,希望能為您的應(yīng)用性能優(yōu)化帶來啟發(fā)~ 作者:shizhengtao,華為性能調(diào)優(yōu)
    的頭像 發(fā)表于 09-15 12:15 ?952次閱讀
    【技術(shù)視界】鴻蒙開發(fā)套件之DevEco Profiler助您輕松<b class='flag-5'>分析</b><b class='flag-5'>應(yīng)用性能</b>問題

    jvm內(nèi)存分析命令和工具

    JVM內(nèi)存分析Java開發(fā)和調(diào)優(yōu)過程中非常重要的一部分。通過對JVM內(nèi)存分析命令和工具的深入了解和使用,可以幫助開發(fā)人員識別內(nèi)存泄漏、性能
    的頭像 發(fā)表于 12-05 11:07 ?1113次閱讀