使用方法:利用google的lightweight-Java-profiler獲取java進程的profile(類hprof格式),再使用gregg大神的awk工具制作成火焰圖,進行分析。
詳細步驟:(可參見http://www.brendangregg.com/blog/2014-06-12/java-flame-graphs.html)
1. 下載lightweight-java-profiler源碼(官網已失效,github有fork,我的源:https://github.com/hh6plus/lightweight-java-profiler)。
2. make all,如果是64位系統可以make BITS=64 all。通常只需要注意BITS為32或者64即可順利通過,如果有問題,需要編輯Makefile直到能順利編譯。
(在Ubuntu一次過,在Mac端會有坑,如HEADERS變量問題、jvmti.h(屬於jdk)中的變量名首部為下划線問題等)
(在Linux下安裝時,需要注意gcc有版本要求,太低版本不支持foreach的冒號語法,會報錯)
生成build-64/目錄下的liblagent.so,它將作為javaagent被使用。
3. 啟動java進程時,添加選項:java -agentpath:${上述文件的目錄} yourClass。
4. 在結束進程后,將自動生成traces.txt,即火焰圖原始數據。
5. 下載火焰圖處理代碼:https://github.com/brendangregg/FlameGraph,使用根據生成火焰圖(svg格式)
- cd FlameGraph
- ./stackcollapse-ljp.awk < ../traces.txt | ./flamegraph.pl > ../traces.svg