后端技术_火焰图的生成原理与构建方式
最近更新:2024-09-23
|
字数总计:464
|
阅读估时:2分钟
|
阅读量:次
- 火焰图能做什么
- 如何绘制火焰图
- 安装必备工具
- 采集堆栈
- 折叠堆栈
- 生成火焰图
- 管道简化命令
- 缺陷
- off-cpu火焰图
- 使能sched_schedstats统计
- 使用perf采集
- 生成火焰图
火焰图能做什么
- cpu占用率分析
- 阻塞问题分析
如何绘制火焰图
安装必备工具
- 火焰图脚本FlameGraph
- 数据采集工具perf(重要)
采集堆栈
- 需要root权限
1 2 3
| top # 查看需要采集的进程的pid perf record -f 99 -p 5000 -g --sleep 30 # -f 每秒99次采集 -p 进程号 -g 记录调用栈 --sleep 持续进行30s perf record -n --stdio # 粗略查看结果,默认文件名是perf.data
|
折叠堆栈
1 2
| perf script -i perf.data &> perf.unfold # 生成调用栈信息 ./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded # 将perf解析出的内容中的符号进行折叠
|
生成火焰图
1
| ./FlameGraph/flamegraph.pl perf.folded > test_oncpu.svg
|
管道简化命令
1
| perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > test_oncpu.svg
|
缺陷
- 调用栈不完整(当调用栈过深的时候,某些系统只返回前面的一部分,比如前10层)
- 函数名缺失(被编译后内联优化,或者是lambda表达式)
off-cpu火焰图
使能sched_schedstats统计
1
| echo 1 > /proc/sys/kernel/sched_schedstats
|
使用perf采集
1 2 3 4 5 6 7
| perf record -e sched:sched_stat_sleep -e sched:sched_switch -e sched:sched_process_exit -p 23509 -g -o perf.data.raw sleep 30 # # # perf inject -v -s -i perf.data.raw -o perf.data # #
|
生成火焰图
1 2 3 4 5 6
| 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 "%s\n%d\n\n", exec, period_ms }' | \ ./FlameGraph/stackcollapse.pl | \ ./FlameGraph/flamegraph.pl --countname=ms --title="Off-CPU Time Flame Graph" --colors=io > zeromq-req-rep-0-off-cpu.svg
|
2024-03-17
该篇文章被 Cleofwine
归为分类:
服务端