用途:perf 是 Linux 内核性能分析工具套件,通过采集 CPU 性能计数器、调用栈和 tracepoint 来定位性能热点。
主要能力:perf top 提供类似 top 的实时热点视图;perf stat 统计硬件事件(可针对命令或运行中的 PID);perf record -g 记录带调用栈的 CPU 剖析;perf report 查看上次记录(--stdio 为非交互模式);perf annotate 将最热函数关联到源码;perf record -a -g 可做全系统剖析;perf record -e 指定硬件事件;perf list 列出可用事件;perf script 输出可生成火焰图;perf mem 做内存访问分析。
使用方式:无持久配置,直接调用。安装命令为 apt install linux-perf 或 dnf install perf,且必须与内核版本匹配。记录默认写入当前目录的 perf.data。
限制与常见问题:perf 与运行内核紧密耦合,linux-tools-<version> 需与 uname -r 完全一致,内核升级后需重装匹配工具包。kernel.perf_event_paranoid 默认值(加固发行版为 2 或 3)会阻止非 root 用户的大部分操作,可设为 1 允许按进程剖析、0 允许全系统剖析,调试后应恢复原值。缺少内核调试符号时调用栈只显示地址,需安装 linux-image-*-dbg 或 dbgsym。火焰图非内置,需配合 Brendan Gregg 的 FlameGraph 脚本(https://github.com/brendangregg/FlameGraph),流程为 perf record -g → perf script → stackcollapse-perf.pl → flamegraph.pl > flame.svg。容器默认 seccomp 与 Kubernetes 策略会阻止 perf_event_open,需在宿主机运行或授予 SYS_ADMIN,均不适合生产。perf top 默认输出较嘈杂,可用 -p <PID> 或 -u <user> 限定范围,并加 --call-graph dwarf 解析符号。
适用场景:Linux 上的 CPU 热点定位、系统级与进程级性能剖析、内存访问分析及火焰图数据生成。