【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 recordperf 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 进行性能分析和瓶颈定位。

posted @ 2025-08-20 15:40  仰望星河Leon  阅读(29)  评论(0)    收藏  举报