perf 是 Linux 内核自带的性能分析工具适合在需要定位 CPU 消耗、函数调用热点或硬件事件异常时进行底层采样分析。先说结论perf 适合生产环境低风险采样但需要 root 权限且要注意对业务的微小干扰。先定位用 perf top 确认 CPU 热点函数先做用 perf record 抓取调用栈数据配合 timeout 控制时长再验证对比优化前后的 cycles 和指令数环境准备与安装大多数发行版需要安装 linux-tools 包且版本需与内核匹配。Ubuntu 下运行sudo apt install linux-tools-common linux-tools-generic linux-tools-$(uname -r)若需要解析动态库符号建议安装调试符号包例如libc6-dbg。perf 通常需要 root 权限或 CAP_SYS_ADMIN 能力普通用户运行可能会报错权限不足。核心命令速用以下是几个最高频的命令直接复制即可使用实时查看热点函数perf top录制数据并生成报告perf record -g -p pid然后perf report查看性能计数器统计perf stat -p pid生产环境低开销采样限制频率 99Hzperf record -F 99 -p pid分步处理流程1.定位热点运行perf top观察实时占用最高的函数。2.采集数据使用timeout 10 perf record -g -p 进程 ID采集 10 秒数据-g 表示记录调用图。避免使用不存在的 --sleep-time 参数。3.分析报告运行perf report查看交互式界面或使用perf script导出文本。perf report 输出解读运行perf report --stdio可查看文本格式典型输出如下# Samples: 10K of event cpu_core # Event count (samples): 10000 # # Overhead Command Shared Object Symbol # ........ ....... ................. ...................... # 45.23% myapp myapp [.] process_request 12.05% myapp [kernel.kallsyms] [k] __mutex_lock 5.10% myapp libc.so.6 [.] malloc关键指标Overhead该函数占用的 CPU 时间百分比越高越需要优化。Command产生性能的进程名。Symbol具体函数名若显示十六进制地址则说明缺失调试符号。怎么验证是否生效优化代码或配置后再次运行perf stat -p pid观察 task-clock、cycles 和 instructions 数值是否下降。如果热点函数在 perf report 中的占比降低说明优化有效。性能提升幅度取决于瓶颈类型通常热点函数占比下降即代表优化有效。常见坑与排查1.权限问题容器内运行 perf 可能受限于 capabilities需要宿主机的支持或调整/proc/sys/kernel/perf_event_paranoid配置。2.开销控制高频采样会增加 CPU 负载生产环境建议控制采样频率使用-F 99限制为 99Hz 以降低干扰。3.符号表缺失如果看到十六进制地址而不是函数名需要确保调试符号已安装。例如 Ubuntu 下安装libc6-dbg或对应包的 debuginfo 版本。来源 https://www.zjcp.cc/ask/10911.html