java 應用使用jfr+sjk 生成應用火焰圖


jfr 是一個低開銷java分析框架,已經內置openjdk 11 中了,我們可以直接使用jcmd 進行應用的性能分析,以下是一個簡單的試用
使用了sjk 結合jfr 生成java 應用的火焰圖

環境准備

注意jdk 需要11,對於應用使用了一個簡單的springboot 應用,后邊會使用ab 進行簡單的壓測

  • docker-compose 文件
 
version: "3"
services: 
    app:
      build: ./
      volumes: 
      - "./app:/app"
      ports:
      - "8080:8080" 
  • Dockerfile
    基於openjdk 11 的運行環境,為了方便運行sjk以及java 應用使用volume 掛載的方式
 
FROM openjdk:11-stretch
LABEL AUTHOR="dalongrong"
LABEL EMAIL="1141591465@qq.com"
WORKDIR /app
COPY docker-entrypiont.sh /docker-entrypiont.sh
RUN chmod +x /docker-entrypiont.sh
EXPOSE 8080 
ENTRYPOINT [ "/docker-entrypiont.sh" ]
  • docker-entrypiont.sh
#!/bin/sh
java \
-XX:+FlightRecorder \
-XX:+PreserveFramePointer \
-jar /app/webapi-0.0.1-SNAPSHOT.jar
  • ab 測試
    host 機器壓測
 
#!/bin/sh
ab -c 10 -n 10000 http://localhost:8080/actuator/env

啟動&&使用

  • 啟動
docker-compose up  -d
  • 啟動jfr
    進入容器,使用jmcd 找出運行應用的pid
docker-compose exec app sh
jcmd  <pid> JFR.start name=demo

效果

 

 

  • 壓測
sh ab.sh
  • dump jfr 數據
jcmd 7 JFR.dump

效果

 

 

  • 使用sjk 生成火焰圖
 
java -jar /app/sjk.jar  flame -f /app/hotspot-pid-7-2020_01_03_07_23_25.jfr -o /app/appdemo.html
 

效果

 

 

  • 火焰圖效果

 

 


線程選擇

 

 

說明

使用jfr 以及sjk 進行火焰圖分析也是一個很不錯的集成方式,也可以方便的進行數據刷選

參考資料

https://github.com/aragozin/jvm-tools/blob/master/sjk-hflame/docs/flame_graph_ui.md
https://github.com/aragozin/jvm-tools
https://github.com/rongfengliang/jfr-sjk-flame-graph-learning
https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/about.htm
https://www.ibm.com/developerworks/cn/java/j-lo-performance-analysissy-tools3/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM