perf基本使用及对java程序的支持

By | 2017 年 04 月 19 日

一、安装

sudo yum install perf

二、设置

1. 使用perf top等命令,可能会提示需要关闭nmi_watchdog

执行关闭:

sudo -u root bash -c “cat /proc/sys/kernel/nmi_watchdog ; echo 0 > /proc/sys/kernel/nmi_watchdog ; cat /proc/sys/kernel/nmi_watchdog”

如果提示:

如果提示 bash: /proc/sys/kernel/nmi_watchdog: Read-only file system

就执行 mount -o remount,rw -t proc /proc/sys /proc/sys

三、java的perf支持

下载java符号工具

https://github.com/jrudolph/perf-map-agent

编译make

修改bin下create-java-perf-map.sh脚本的jdk路径和java命令路径到要perf的java进程的路径

四、开始perf

执行

perf-map-agent/bin/create-java-perf-map.sh 在/tmp下生成symbol mapping

perf相关命令:

sudo perf record -g -p 抓取调用栈
sudo perf report 查看
sudo perf script -v -G 原始采样

手工统计方法次数:

导出到文件
sudo perf script -v -G > perfSample.log
抽取函数
awk ‘{print substr($0, 50)}’ perfSample.log > perfSampleMethod.log
注意截取的长度
awk ‘{print substr($0, 0, 33)}’ perfSample.log | uniq | sort | uniq
统计方法次数
sort perfSampleMethod.log | uniq -c | sort -k 1 -n -r > perfMethodCnt.log

五、生成火焰图

下载

https://github.com/brendangregg/FlameGraph

执行

sudo perf script | ~/FlameGraph-master/stackcollapse-perf.pl | ~/FlameGraph-master/flamegraph.pl –color=java –hash > flamegraph.svg

六、相关链接

http://www.brendangregg.com/perf.html
https://github.com/jrudolph/perf-map-agent
http://www.brendangregg.com/flamegraphs.html

http://techblog.netflix.com/2015/07/java-in-flames.html
https://github.com/brendangregg/FlameGraph
https://github.com/jvm-profiling-tools/perf-map-agent

发表评论