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


原网址: 访问
创建于: 2024-03-08 11:47:16
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论