前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flame Graph 火焰图分析 Java 性能

Flame Graph 火焰图分析 Java 性能

作者头像
Dylan Liu
发布2019-07-01 13:18:00
1.8K0
发布2019-07-01 13:18:00
举报
文章被收录于专栏:dylanliudylanliu

摘要

火焰图是分析应用性能问题很好的工具,只是网上的文章都是讲述分析 C, C++ 等语言的,对Java 语言描述甚少,此处记录一下自己使用火焰图分析Java 栈的过程。

环境

Linux: centos6 jdk: 1.7

步骤

火焰图是性能大神 brendangregg 创造的,我们使用的脚本在他的github 上 https://github.com/brendangregg/FlameGraph.git , 将项目clone 到本地,进入到 FlameGraph 文件夹中,创建两个文件(文件来自mik01aj 的gist,稍微修改了一下)

profile.sh:

代码语言:javascript
复制
#!/bin/sh

# Usage: ./profile.sh pid output.txt

PROFILED_PID=$1
OUTPUT_FILE=$2

echo "Getting stacktraces from process $PROFILED_PID... Will stop on ^C or when the process exits."

rm -f "$OUTPUT_FILE"

while true; do
    jstack "$PROFILED_PID" >> "$OUTPUT_FILE" && sleep 0.01 || break
done

echo
echo "Done! Stacks saved to $OUTPUT_FILE"

gen.sh:

代码语言:javascript
复制
#!/bin/bash

# Usage: ./gen.sh collected-stacks.txt

TMPSTACKS=/tmp/flamegraph-stacks-collapsed.txt
TMPPALETTE=/tmp/flamegraph-palette.map

./stackcollapse-jstack.pl --no-include-tname $1 > $TMPSTACKS

# 1st run - hot: default
./flamegraph.pl --cp $TMPSTACKS > stacks.svg

# 2nd run - blue: I/O
cp palette.map $TMPPALETTE
cat $TMPPALETTE | grep -v '\.read' | grep -v '\.write' | grep -v 'socketRead' | grep -v 'socketWrite' | grep -v 'socketAccept' > palette.map
./flamegraph.pl --cp --colors=io $TMPSTACKS > stacks.svg

rm -f palette.map 
echo "Done! Now see the output in stacks.svg"

然后将stacks.svg 下载到本地,使用浏览器打开即可。

遇到的问题

本来参考了1 想使用perf 来生成采样信息,但是安装了一大堆东西之后,采样后的数据(采样脚本 perf record -F 99 -p 98498 -- sleep 30; ./jmaps)一直报perf file's data size field is 0 which is unexpected., 也没有找到解决办法,加上 -v 之后会打印一个 couldn't open /proc/21847/status的错误,不知道为什么会读取这个进行的状态,应该说只读取采样进程的状态就可以了。后来直接使用网上的命令perf record -F 99 -a -- sleep 30; ./jmaps,可以采样出来,但是生成的火焰图无法看,是系统栈与java栈混在一起而且 Java 栈的信息很模糊,不可用。

参考网址

  1. 使用linux perf工具生成java程序火焰图
  2. Linux下用火焰图进行性能分析
  3. perf CPU Sampling
  4. How to Install perf Tool on CentOS and Ubuntu
  5. gen.sh, profile.sh
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
  • 步骤
  • 遇到的问题
  • 参考网址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档