jfr 是一个低开销,已经内置openjdk 11 中了,我们可以直接使用jcmd 进行应用的性能分析,以下是一个简单的试用
使用了sjk 结合jfr 生成java 应用的火焰图
注意jdk 需要11,对于应用使用了一个简单的springboot 应用,后边会使用ab 进行简单的压测
version: "3"
services:
app:
build: ./
volumes:
- "./app:/app"
ports:
- "8080:8080"
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" ]
#!/bin/sh
java \
-XX:+FlightRecorder \
-XX:+PreserveFramePointer \
-jar /app/webapi-0.0.1-SNAPSHOT.jar
#!/bin/sh
ab -c 10 -n 10000 http://localhost:8080/actuator/env
docker-compose up -d
docker-compose exec app sh
jcmd <pid> JFR.start name=demo
效果
sh ab.sh
jcmd 7 JFR.dump
效果
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
原文:https://www.cnblogs.com/rongfengliang/p/12145255.html