IDEA 中使用火焰圖

背景

IntelliJ IDEA 與以下分析工具集成:

  • Async Profiler:適用于 Linux 和 macOS 的 CPU 和內存分析工具。
  • Java Flight Recorder:Oracle 提供的 CPU 工具蹦漠,可在 Linux屯蹦、macOS 和 Windows 上使用。

使用簡介

public class Demo {

    public static void main(String[] args) {
        for (int i = 0; i < 10000000; i++) {
            System.out.println(produceString());
        }
    }

    private static String produceString() {
        return "Hello World";
    }
}

選擇 【Run 'xxx' with 'Java Flight Recorder'

Run 'xxx' with 'Java Flight Recorder'

會出現如下錯誤:

Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Error: To use 'FlightRecorder', first unlock using -XX:+UnlockCommercialFeatures.

在 VM options 中添加 -XX:+UnlockCommercialFeatures 參數。

在【Profiler】窗口點擊【Stop Profiling and Show Results】


然后就可以看到結果阔逼。

Profiler 展示圖表

1. Flame Graph(火焰圖)

Flame Graph

2. Call Tree(調用樹)

Call Tree

3. Method List(方法列表)

Method List

F4 調轉到源碼:

image.png

實戰(zhàn)演練

public class Demo {

    @SneakyThrows
    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) {
            System.out.println(produceString());
        }
        System.out.println("準備進入需要測試的方法");
        testMethod();
        System.out.println("已經從測試的方法返回");

        Thread.sleep(10 * 1000);
    }

    private static String produceString() {
        return "Hello World";
    }

    private static void testMethod() {
        int count = 0;
        for (int i = 0; i < 30; ++ i) {
            timeConsuming();
        }
        System.out.println(count);
    }

    @SneakyThrows
    private static void timeConsuming(){
        for (int i = 0; i < 20000; ++ i) {
            byte[] temp = new byte[10000];
            new Random().nextBytes(temp);
        }
    }
}

假設 testMethod() 方法執(zhí)行耗時太長,我們需要排查時間花費在哪里地沮。

排查步驟如下所示:

  • 1)在需要排查的方法前后打上斷點(這個方法嗜浮,可能是根據日志中的執(zhí)行時間識別出來的)羡亩,如下圖所示。


    image.png
  • 2)以 debug 模式啟動項目危融。(需要在 VM options 中添加 -XX:+UnlockCommercialFeatures 參數畏铆。)

  • 3)在第一個斷點(需要排查的方法前一行語句)暫停時,在 Profiler 創(chuàng)建選擇第(1)步啟動 JVM 進程(Process Name 一般會展示為 main 函數所在的類)進行 Attach Profiler to Process... 的操作专挪。如下圖所示

  • 4)繼續(xù)運行之前的項目及志,在第二個斷點暫停時,在【Profiler】窗口點擊【Stop Profiling and Show Results】寨腔,然后繼續(xù)運行之前的項目。

通過【Flame Graph】可以看出率寡,java.util.Random#nextBytes 調用棧的采樣率為 99.43%迫卢。表示 CPU 大部分時間都在執(zhí)行 java.util.Random#nextBytes 函數。和預期一致冶共!

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捅僵,隨后出現的幾起案子家卖,更是在濱河造成了極大的恐慌,老刑警劉巖庙楚,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件上荡,死亡現場離奇詭異,居然都是意外死亡馒闷,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谁榜,“玉大人刹泄,你說我怎么就攤上這事∈璩妫” “怎么了永罚?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卧秘。 經常有香客問我呢袱,道長,這世上最難降的妖魔是什么斯议? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任产捞,我火速辦了婚禮,結果婚禮上哼御,老公的妹妹穿的比我還像新娘坯临。我一直安慰自己焊唬,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布看靠。 她就那樣靜靜地躺著赶促,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挟炬。 梳的紋絲不亂的頭發(fā)上鸥滨,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音谤祖,去河邊找鬼婿滓。 笑死,一個胖子當著我的面吹牛粥喜,可吹牛的內容都是我干的凸主。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼额湘,長吁一口氣:“原來是場噩夢啊……” “哼卿吐!你這毒婦竟也來了?” 一聲冷哼從身側響起锋华,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤嗡官,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后毯焕,有當地人在樹林里發(fā)現了一具尸體衍腥,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年芥丧,在試婚紗的時候發(fā)現自己被綠了紧阔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡续担,死狀恐怖擅耽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情物遇,我是刑警寧澤乖仇,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站询兴,受9級特大地震影響乃沙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜诗舰,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一警儒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦蜀铲、人聲如沸边琉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽变姨。三九已至,卻和暖如春厌丑,著一層夾襖步出監(jiān)牢的瞬間定欧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工怒竿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砍鸠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓耕驰,卻偏偏與公主長得像睦番,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耍属,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354