性能瓶颈查找-火焰图分析

什么是火焰图

⽕焰图仅⽤⼀张⼩图,就可以定量展示所有的性能瓶颈的全景图,⽽不论⽬标软件有多么复杂。
传统的性能分析⼯具通常会给⽤户展示⼤量的细节信息和数据, ⽽⽤户很难看到全貌,反⽽容易去优化那些并不重要的地⽅,经常浪费⼤量时间和精⼒却看不到明显效果。传统分析器的另⼀个缺点是,它们通常会孤⽴地显示每个函数调⽤的延时,但很难看出各个函数调⽤的上下⽂,⽽且⽤户还须刻意区分当前函数本身运⾏的时间和包括了其调⽤其他函数的时间在内的总时间。


火焰图可以分析什么

可以通过传统的工具分析函数的cpu时间,阻塞时间,还有哪些函数频繁的分配内存。

火焰图的样子 

从火焰图中,我们可以看到函数的调用栈,而从左到右是函数调用所占用的次数,从图中可以看到最底层到最底层,占用的时间依次递减。

火焰图的类型及应用场景

常⻅的⽕焰图类型有 On-CPU,Off-CPU,还有 Memory,Hot/Cold,Differential 等等。它们有各⾃适合处理的场景

 生成火焰图

1、下载火焰图生成源码

git clone https://gitee.com/mirrors/FlameGraph.git

2、通过工具生成对应的数据

火焰图支持多种工具

 从源码就可以看出,支持的各种各样的工具

下面以perf工具为例子,如果你的系统没有,直接使用命令安装yum或者apt-get

2、CPU-ON

编写程序,使cpu尽量处于能占用100%的状态

top查看进程ID,以我的为例子

使用工具:

perf record -F 99 -p 27645 -g -- sleep 120

 生成avg

perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > curl.svg

打开火焰图

3、 CPU-OFF

1、使能sched_schedstats统计

echo 1 > /proc/sys/kernel/sched_schedstats

2、使用工具生成

perf record -e sched:sched_stat_sleep -e sched:sched_switch -e sched:sched_process_exit -p 27645 -g -o perf.data.raw sleep 30

perf inject -v -s -i perf.data.raw -o perf.data

3、生成火焰图

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 }' | \
./stackcollapse.pl | \
./flamegraph.pl --countname=ms --title="Off-CPU Time Flame
Graph" --colors=io > offcpu.svg

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值