概述
on-cpu火焰图
准备
1. 首先目标二进制编译加参数 -fno-omit-frame-pointer
2. 安装perf:yum install -y perf
数据采样
perf record -F 99 -p PID -g -- sleep 60
perf record -g <binary>
-F 99
: 每秒采样99次-p PID
: 指定进程id-g
: 记录调用栈sleep 60
: 持续60秒, 如果不加则一直采样到手动中断(CRTL+C)为止
上面的命令会生成一个perf.data的文件.
- 执行
perf report -n
可以生成报告的预览 - 执行
perf report -n --stdio
可以生成一个详细的报告 - 执行
perf script > out.perf
可以 dump 出 perf.data 的内容
生成火焰图
通常的做法是将 out.perf 拷贝到本地机器在本地生成火焰图
复制
1 2 3 4 5 6 7 8 | # 下载火焰图生成工程 git clone --depth 1 https://github.com/brendangregg/FlameGraph.git # 折叠调用栈 FlameGraph/stackcollapse-perf.pl out.perf > out.folded # 生成火焰图 FlameGraph/flamegraph.pl out.folded > out.svg |
生成火焰图可以指定参数,–width
可以指定图片宽度,–height
指定每一个调用栈的高度
on-cpu火焰图
准备
echo 1 >/proc/sys/kernel/sched_schedstats
yum install kernel-debug kernel-debug-devel kernel-debug-debuginfo
数据采样
进行采集(-t <TID>)
sudo perf record -e sched:sched_stat_sleep -e sched:sched_switch -e
sched:sched_process_exit -t 427173 -g -o perf.data.raw sleep 10
或(-p `pidof <exec-file>`)
sudo perf record -e sched:sched_stat_sleep -e sched:sched_switch -e
sched:sched_process_exit -p `pidof trade_server` -g -o perf.data.raw sleep 10
合并事件
sudo perf inject -v -s -i perf.data.raw -o perf.data
生成火焰图
sudo perf script -F comm,pid,tid,cpu,time,period,event,ip,sym,dso,trace | awk '
NF > 4 { exec = $1; period_ms = int($5 / 1000000) }
NF > 1 && NF <= 4 && period_ms > 0 { print $2 }
NF < 2 && period_ms > 0 { printf "%sn%dnn", exec, period_ms }' |
./stackcollapse.pl |
./flamegraph.pl --countname=ms --title="Off-CPU Time Flame Graph" --colors=io > offcpu.svg
参考
https://github.com/brendangregg/FlameGraph.git
https://www.sohu.com/a/152267069_736949
https://codertang.com/2018/12/17/perf/
最后
以上就是苗条草丛为你收集整理的CentOS7 火焰图制作on-cpu火焰图on-cpu火焰图的全部内容,希望文章能够帮你解决CentOS7 火焰图制作on-cpu火焰图on-cpu火焰图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复