JVM那點(diǎn)事—火焰圖(flame graph)性能分析

相關(guān)文章

Arthas——java調(diào)試工具的使用

JVM那點(diǎn)事—show-busy-java-threads排查CPU性能問題

JVM那點(diǎn)事—火焰圖(flame graph)性能分析

推薦閱讀

阮一峰的網(wǎng)絡(luò)日志—如何讀懂火焰圖?

是誰(shuí)在調(diào)用我?使用 arthas+jprofiler 做復(fù)雜鏈路分析

1. 什么叫做火焰圖

火焰圖(flame graph)是性能分析的利器。

火焰圖.png

y軸表示調(diào)用棧,每一層都是一個(gè)函數(shù)。調(diào)用棧越深,火焰就越高,y軸一般是從下往上看,分析占用時(shí)間比較高的方法。(請(qǐng)求由下往上訪問)。

x軸表示抽樣數(shù),如果一個(gè)函數(shù)在x軸占據(jù)的寬度越寬,就表示它被抽到次數(shù)多,即執(zhí)行時(shí)間長(zhǎng)。注意,x軸不代表時(shí)間,而是所有棧合并后,按字母順序的排序。

火焰圖就是看從下往上看的哪個(gè)函數(shù)占據(jù)的寬度最大,只要有“平頂”,就表示該函數(shù)可能存在性能問題。

顏色沒有特殊含義,因?yàn)榛鹧鎴D表示的是 CPU 的繁忙程度,所以一般選擇暖色調(diào)。

案例.png

例如,火焰圖上方占用的寬度明顯過(guò)大,分析是mybatis的日志打印,我們就可以得出因?yàn)轫?xiàng)目開啟mybatis日志打印級(jí)別過(guò)低導(dǎo)致性能問題。

2. Arthas打印火焰圖

Arthas 3.1.5 用戶文檔火焰圖部分

啟動(dòng)Arthas方式

2.1 啟動(dòng)profiler

開啟arthas

 java -jar arthas-boot.jar 

開啟火焰圖

profiler start
Started [cpu] profiling

默認(rèn)啟動(dòng)的是對(duì)CPU的收集??梢苑治鲆粋€(gè)系統(tǒng)中性能耗時(shí),占用時(shí)間比較多的方法。

也可以使用--event參數(shù)指定要采樣的事件。例如:

# 對(duì)內(nèi)存進(jìn)行分析
$ profiler start --event alloc

可以使用下面命令看對(duì)event的支持。

profiler list

生成的svg文件,可以使用sz命令下載下來(lái),直接使用瀏覽器打開。

# 獲取已采集的sample的數(shù)量
$ profiler getSamples
# 查看profiler狀態(tài)
$ profiler status

2.2 關(guān)閉profiler

默認(rèn)情況下,生成的結(jié)果保存到應(yīng)用的工作目錄下的arthas-output目錄??梢酝ㄟ^(guò) --file參數(shù)來(lái)指定輸出結(jié)果路徑。比如:

$ profiler stop --file /tmp/output.svg
profiler output file: /tmp/output.svg
OK

3. 火焰圖的互動(dòng)性

來(lái)源:阮一峰的網(wǎng)絡(luò)日志—如何讀懂火焰圖?

火焰圖是 SVG 圖片,可以與用戶互動(dòng)。

(1)鼠標(biāo)懸浮

火焰的每一層都會(huì)標(biāo)注函數(shù)名,鼠標(biāo)懸浮時(shí)會(huì)顯示完整的函數(shù)名、抽樣抽中的次數(shù)、占據(jù)總抽樣次數(shù)的百分比。下面是一個(gè)例子。

mysqld'JOIN::exec (272,959 samples, 78.34 percent)

(2)點(diǎn)擊放大

在某一層點(diǎn)擊,火焰圖會(huì)水平放大,該層會(huì)占據(jù)所有寬度,顯示詳細(xì)信息。

image

左上角會(huì)同時(shí)顯示"Reset Zoom",點(diǎn)擊該鏈接,圖片就會(huì)恢復(fù)原樣。

(3)搜索

按下 Ctrl + F 會(huì)顯示一個(gè)搜索框,用戶可以輸入關(guān)鍵詞或正則表達(dá)式,所有符合條件的函數(shù)名會(huì)高亮顯示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容