【C++】profiler工具
1. core+gdb
程序生产环境运行时若崩溃生成core文件,事后分析原因,查看core文件。对程序运行几乎无影响。
2. 内存调试工具valgrind
在开发环境下测试分析程序时,使用valgrind。严重拖慢程序运行。
https://zhuanlan.zhihu.com/p/15101814919
3. 性能分析工具perf
perf report 是 Linux 性能分析工具 perf 的重要组成部分,用于解析 perf record 生成的数据文件(默认为 perf.data),并以交互式或文本方式展示性能热点。
安装perf
出现 bash: perf: 未找到命令 说明你的系统当前没有安装 perf 工具,或者它不在你的 PATH 环境变量中。
如何安装 perf
perf 属于 Linux 内核工具包的一部分,安装方法取决于你使用的 Linux 发行版:
Ubuntu / Debian 系
sudo apt update
sudo apt install linux-tools-common linux-tools-generic linux-tools-$(uname -r)
CentOS / RHEL / Rocky / AlmaLinux
sudo yum install perf
# 或
sudo dnf install perf
Arch Linux / Manjaro
sudo pacman -S perf
openSUSE
sudo zypper install perf
如果安装后仍提示找不到
- 检查是否安装成功:
which perf
如果返回为空,说明没有安装成功或安装路径不在 PATH 中。
- 手动指定路径(如果知道安装位置):
/usr/bin/perf report
- 确认内核版本匹配:
perf工具版本必须与当前运行的内核版本匹配,否则可能无法正常工作。
快速验证安装是否成功
安装完成后,执行:
perf --version
如果显示版本信息,说明安装成功,可以正常使用 perf record 和 perf report 了。
基本使用步骤
1. 数据采集(perf record)
在分析之前,需先使用 perf record 采集数据:
# 针对进程 ID 为 1234 的程序,以 99Hz 频率采样 CPU 周期事件,并记录调用栈
perf record -F 99 -g -p 1234 -o perf.data -- sleep 30
-F 99:采样频率为 99Hz。-g:记录调用栈(call graph)。-p 1234:指定进程 ID。-o perf.data:输出文件。-- sleep 30:采样持续 30 秒。
2. 生成报告(perf report)
使用 perf report 解析数据:
# 交互式查看
perf report -i perf.data
# 文本模式输出
perf report -i perf.data --stdio --no-children
-i:指定输入文件(默认perf.data)。--stdio:文本模式输出。--no-children:不显示子函数的累积开销。
交互式界面操作
在交互式界面中,可以使用以下按键:
- ↑/↓:选择函数。
- Enter:展开/折叠调用栈。
- a:显示汇编代码(需程序带调试符号
-g)。 - h:帮助。
高级用法
- 过滤特定符号:
perf report -i perf.data --symbols='*my_func*' - 限制显示行数:
perf report -i perf.data --stdio --max-stack=5 - 生成火焰图:
perf script > out.perf ./FlameGraph/stackcollapse-perf.pl out.perf > out.folded ./FlameGraph/flamegraph.pl out.folded > flame.svg
注意事项
- 权限:部分事件需要 root 或
CAP_PERFMON权限。 - 调试符号:确保被分析的程序编译时添加
-g选项,以便perf解析函数名。 - 内核版本:不同内核版本支持的性能事件不同,可通过
perf list查看支持的事件。
以上步骤和用法可以帮助你有效利用 perf report 进行性能分析和瓶颈定位。

浙公网安备 33010602011771号