C++火焰图

基础

安装perf
apt install linux-tools-common
下载FlameGraph
git clone https://github.com/brendangregg/FlameGraph.git

on-cpu火焰图

编写采集脚本
#!/bin/bash

if [ $# -lt 1 ]
then
  echo 'please input pid:'
  echo './xxx.sh [pid] [option:filename] [option:sleepTime(seconds)] [option:dstPrefixPath]'
  exit 1
fi

# 默认参数
flameGraphPath=/home/jon/workspace/FlameGraph
dstPrefixPath=/home/jon/workspace/tmp
sleepTime=30
filename=test

if [[ $2 && -n "$2" ]]
then
  filename=$2
fi
if [[ $3 && $3 -gt 0 ]]
then
  sleepTime=$3
fi
if [[ $4 && -n "$4" ]]
then
  dstPrefixPath=$4
fi

sudo perf record -g -F 99 -p $1 -o $dstPrefixPath/$filename.data -- sleep $sleepTime
sudo perf script -i $dstPrefixPath/$filename.data > $dstPrefixPath/$filename.perf
$flameGraphPath/stackcollapse-perf.pl $dstPrefixPath/$filename.perf > $dstPrefixPath/$filename.floded
$flameGraphPath/flamegraph.pl $dstPrefixPath/$filename.floded > $dstPrefixPath/$filename.svg
火焰(Flame Graph)是一种用于分析程序性能的工具,特别适用于Linux环境下C++程序的性能调优。火焰通过可视化方式展示程序的调用栈,帮助开发人员快速定位性能瓶颈。 火焰的主要特点包括: 1. **直观展示**:火焰形方式展示函数调用的堆栈,宽度表示函数的执行时间,调用关系通过堆叠显示。 2. **易于分析**:通过火焰,开发人员可以直观地看到哪些函数占用了最多的CPU时间,从而快速定位性能瓶颈。 3. **交互性**:火焰通常是可交互的,用户可以点击不同的部分来放大或缩小,查看更详细的信息。 生成火焰通常需要以下步骤: 1. **采样**:使用性能分析工具(如perf)采样程序的调用栈数据。 2. **生成SVG**:将采样数据转换为火焰格式,通常是SVG文件。 3. **查看与分析**:使用浏览器打开SVG文件,查看火焰并进行性能分析。 以下是一个简单的生成火焰的示例: ```bash # 安装perf工具 sudo apt-get install linux-tools-common linux-tools-$(uname -r) # 运行程序并采样数据 perf record -F 99 -p $(pgrep -n your_program_name) -g -- sleep 60 # 生成火焰 perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg ``` 在上述命令中,`your_program_name`是你要分析的C++程序的名称,`flamegraph.pl`是火焰生成脚本。 通过火焰,开发人员可以快速识别出哪些函数调用占用了最多的资源,从而进行有针对性的优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值