Java-FlameGraph火焰圖

什麼是FlameGraph火焰圖?怎麼用?如下會爲你一一解答。html

Let's Go!


1.結論

  • 若是能生成出來對應圖表,分析java使用cpu性能很好用。
  • 可是有時生成出來的堆棧寫着Unknown,沒有具體堆棧信息,會比較抓狂。

如想獲取更多信息請參考:https://github.com/jvm-profiling-tools/perf-map-agent/issues/44java

  • Github提問題回覆速度也較慢,遇到本身解決不了的問題也會比較頭疼。

2.是什麼?

用於量化框架中的性能,包括代碼編譯消耗的時間,代碼緩存,其餘系統類庫及內核代碼執行的時間,經常使用於定位cpu使用率問題。linux

3.有什麼種類?

4.怎麼樣?

clipboard.png

5.安裝及應用呢?

FlameGraph介紹git

安裝及應用步驟github

環境要求(重要)

  • 操做系統centos 7.0
  • cmake2.8.6或以上
  • JDK8 update 60 build 19 之後,須要添加jdk啓動參數:-XX:+PreserveFramePointer
  • 安裝perf

6.怎麼看?

clipboard.png

圖表

  • y軸:棧深度
  • x軸:cpu時間
  • 長方形:一個棧(方法)
  • 長度:出如今監視器中的時長(佔用cpu的時間)
  • 其餘:從左到右的順序只是按字母排序,無其餘意義

分析

  • 從下到上:從父到子方法追查方法
  • 從上到下:先找出佔用最多時間的棧,找出它的進程,在圖最底部,關注最寬的方法。

工具包

  • perf_events:標準linux分析器,用於生成系統堆棧信息
  • perf-map-agent:提供轉換perf_events成帶java標示的JVMTI代理
  • Flame Graph:生成火焰圖的工具
  • Misc:生成所有java進程的堆棧信息

7.還有一些問題

  • 不少java方法都是缺乏的,對比起jstack,在圖裏的堆棧信息可能只有1/3的深度。
  • JVM動態編譯(JIT)時不會暴露一個圖表給系統監視器(已修復)
  • JVM還使用x86上的幀指針寄存器(RBP在x86 - 64)做爲一個通用寄存器
相關文章
相關標籤/搜索