日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

火焰图 性能分析 java,使用火焰图进行Java应用性能分析

發布時間:2025/3/21 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 火焰图 性能分析 java,使用火焰图进行Java应用性能分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者: 一字馬胡

轉載標志 【2017-11-19】

更新日志

日期

更新內容

備注

2017-11-19

新建文章

初版

導入

本文主要想要記錄進行java應用性能分析的一種方式,也就是使用火焰圖來進行java應用性能分析,本文將介紹一些工具,包括如何生成profile數據,以及如何根據profile數據生成火焰圖等,本文的內容都基于Linux(Ubuntu x64)系統,這一點需要特別注意。如果你有時間的話,可以去閱讀以下Java Flame Graphs,作者是Brendan Gregg大神,本文介紹的生成火焰圖的工具就出自Brendan Gregg之手。

Action

首先,我們需要收集java代碼運行時的profile數據,本文使用的是一個叫做lightweight-java-profiler的工具,你需要下載lightweight-java-profiler,并且自己編譯才能使用它來進行數據收集,關于lightweight-java-profiler的更多的細節介紹,可以參考參考鏈接。你可以直接在github搜索lightweight-java-profiler,并且clone到本地進行編譯,當然在編譯之前你可以進行一些數據收集的方案定制:

// Things that should probably be user-configurable

// Number of times per second that we profile

static const int kNumInterrupts = 100;

// Maximum number of stack traces

static const int kMaxStackTraces = 3000;

// Maximum number of frames to store from the stack traces sampled.

static const int kMaxFramesToCapture = 128;

// Location where the data are dumped.

static const char kDefaultOutFile[] = "traces.txt";

上面的參數設定在globals.h文件中可以找到,可以根據實際情況進行設定,比如kNumInterrupts的意思就是每秒鐘進行數據收集的次數,默認輸出profile數據的文件的名字為“traces.txt”,這些你都可以做自定義修改,當改好的之后就可以進行編譯了,在64位機器上編譯可以使用下面的命令:

make BITS=64 all

如果順利的話,可以看到會生成一個build-64的文件夾,里面有一個.so文件叫做liblagent.so,這就是我們需要的收集profile數據的.so文件。現在,你可以在啟動你的java應用的時候加上下面的參數:

-agentpath:${path}/lightweight-java-profiler/build-64/liblagent.so

然后就可以獲取到trace.txt文件。接下來,就需要將java應用的運行時profile數據轉換為可視化的火焰圖來進行性能分析了,將profile數據轉換為火焰圖的工具上文已經提到過,可以在FlameGraph下載,下載完成之后,就可以運行下面的命令來生成火焰圖了:

cd FlameGraph

./stackcollapse-ljp.awk < ${path}/traces.txt | ./flamegraph.pl > {$path}/traces.svg

現在,你應該可以得到一個火焰圖的.svg文件了,在瀏覽器中打開就可以看到火焰圖的細節了。關于火焰圖,可以參考下面的說明:

The y-axis is stack depth, and the x-axis spans the sample population. Each rectangle is a stack frame. Color is not important, it's randomized to differentiate frames. The ordering from left to right is also unimportant.

You look for the widest frames, from bottom up, and forks in the "flames", which indicate different code paths taken

所以,我們在看火焰圖的時候,主要關注比較寬的就可以發現性能問題了,因為越寬代表占用的CPU時間越多,也就越是性能瓶頸,當然這種分析得結合實際的應用代碼,下面是一張火焰圖,具體的分析就不在本文的中進行了。本文僅記錄一種分析java應用性能問題的方案,采用觀察運行時火焰圖的方式來發現應用的性能瓶頸是一種比較直觀的方法,而采集profile數據使用lightweight-java-profiler,將采集到的profile數據轉換為火焰圖使用工具FlameGraph,當未來需要對java應用進行性能優化的時候,可以采用這種方案來發現性能瓶頸,并及時進行優化。

火焰圖示例

總結

以上是生活随笔為你收集整理的火焰图 性能分析 java,使用火焰图进行Java应用性能分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。