准备
Java honest profiler工具: https://github.com/jvm-profiling-tools/honest-profiler
根据prof输出生成flame graph工具: http://www.brendangregg.com/FlameGraphs
Java honest profiler工具的编译安装
虽然github上提供了编译好的二进制,但其依赖的glibc为3.x的,不能使用,需要自己编译,参考其说明文档,cmake & mvn clean -DskipTest package,整个过程比较顺利;
- jdk本身一个提供了一个叫hprof的采样工具,我也实验了下,感觉没有honest工具好用;
- google有提供一个叫做lightweight-java-profiler的工具,不过现在已经没人维护了,测试了下,失败了;
使用
1.在SPARK_HOME/bin/spark-class文件中,修改启动命令:
# 使用jdk提供hprof工具配置
#"$RUNNER" -agentlib:hprof=cpu=samples,depth=100,interval=7,lineno=y,thread=y,monitor=y,file=output.hprof -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$
@"
# 使用honest工具,添加配置
"$RUNNER" -agentpath:/home/hadoop/build/honest-profiler/honest-profiler/build/liblagent.so=interval=7,logPath=honest.hpl -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.l
auncher.Main "$@"
- 启动spark程序,程序会在当前路径生成profile文件;
- 基于
honest-profiler.jar
对原始prifile文件进行处理;(本实现采用honest-profiler)
java -cp /home/hadoop/build/honest-profiler/honest-profiler/target/honest-profiler.jar com.insightfullogic.honest_profiler.ports.console.FlameGraphDumperApplication /home/hadoop/work/spark/honest.hpl /home/hadoop/work/spark/honest.hpl.folded
- 利用FlameGraph工具生成动态svg
./FlameGraph/flamegraph.pl /home/hadoop/work/spark/honest.hpl.folded > /tmp/flamegraph-java.svg
后续
当前踩点貌似太少了,如何长时间踩点?
参考:
- 使用honest-profiler博客:https://blog.codecentric.de/en/2017/09/jvm-fire-using-flame-graphs-analyse-performance/
- https://github.com/dcapwell/lightweight-java-profiler/blob/master/README.md
- jdk hprof工具介绍: https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html
- 探索Spark Tungsten的秘密:https://github.com/hustnn/TungstenSecret
网友评论