文档首页> 技术教程> 用 perf 看热点函数(入门)

用 perf 看热点函数(入门)

发布时间:2025-11-25 19:37        更新时间:2025-11-26 17:36
进程 CPU 占用居高不下,却不知道它在忙哪段代码,perf 就是为这个问题准备的工具。它是 Linux 内核自带的性能分析框架,不重启、不改代码就能采样,内核开发者用它,应用运维也能用它,门槛没有想象的高。 准备:yum install perf 或 apt install linux-tools-$(uname -r)。虚拟机里若提示计数器不可用,说明平台没开放 PMU 硬件计数,可退而使用软件事件采样。 一、实时观察热点 perf top -p PID 直接进入实时界面,函数按 CPU 占用排序,sample 越高越热,几秒钟就能看到"它到底在忙什么"。不加 -p 时看全机,加了只看单个进程,按需选择。热点函数看的是相对占比,绝对值会随负载浮动。网络包处理、加解密、序列化这三类函数常年霸榜,看到别意外。符号显示为十六进制地址时,安装对应软件包的 debuginfo 符号包即可解析出函数名。 二、采样记录与回放 perf record -F 99 -g -p PID -- sleep 30,-F 99 表示每秒采样 99 次,-g 连同调用栈一起记录;结束后 perf report 查看报告,展开调用链找到占比最高的路径。采样结果默认存在当前目录的 perf.data,注意别覆盖上一轮。采样期间业务要保持常态流量,闲时采到的热点没有代表性。生产环境控制采样在半分钟内、频率别超过 200,开销可以忽略。 三、火焰图一句话 把 perf script 的输出交给 FlameGraph 工具集生成 SVG 火焰图,横向宽度即占用比例,从顶层往下看最宽的那一格就是热点,比报告直观得多。配色有含义但不必纠结,看宽度排序就够了。 四、适合的场景 自研或可调优服务出现 CPU 异常时定位具体函数,改造前后各采一轮做对比,优化有没有效果一目了然;多线程程序的热点要按线程展开看,报告里支持切换视角。先在测试环境把命令练熟,再上生产采样。IO 等待型问题不归它管,那是 iostat、blktrace 的领域,工具别用错对象。 热点定位属于讲证据的活,一条采样记录胜过十次猜测。