性能调优 / 命令文档
Perf CPU 性能分析
概述
Linux 系统性能优化的利器
实时性能监控
复制
# 查看系统整体 CPU 热点
perf top
第一行采样数(Samples)、事件类型(event)和事件总数量(Event count)。
第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
最四列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。
# 监控特定进程 (替换 <PID> 为实际进程ID)
perf top -p <PID>
# 监控特定命令执行
perf top -c <命令名>性能数据记录
复制
# 记录系统性能数据(包含调用栈)
perf record -g
# 记录特定进程性能
perf record -g -p <进程ID>
# 记录命令执行过程
perf record -g ./your_program
# 自定义采样频率和时间
perf record -g -F 1000 sleep 10 # 1000Hz采样10秒性能分析与报告
基础报告分析
复制
# 查看性能报告
perf report
# 显示调用图
perf report -g
# 文本格式输出
perf report --stdio热点函数定位
复制
# 按开销排序
perf report --sort=overhead
# 按符号排序
perf report --sort=symbol
# 分析调用关系
perf report -g fractal,0.5火焰图生成
注意: 火焰图需要额外的工具支持,建议在开发环境中使用。
复制
# 下载火焰图工具
git clone https://github.com/brendangregg/FlameGraph.git
# 生成火焰图
perf record -g <命令>
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > flame.svg
# 在浏览器中查看
firefox flame.svg快速诊断步骤
整体性能概览 运行 perf top 查看实时热点函数和 CPU 使用情况
记录详细数据 使用 perf record -g 记录包含调用栈的性能数据
分析性能报告 运行 perf report -g 查看详细的性能分析报告
定位热点函数 关注 Overhead 最高的函数,这些是优化重点
深入调用栈 展开热点函数的调用关系,找出具体的性能瓶颈位置
输出结果解读
Overhead
函数占用 CPU 时间的百分比,数值越高表示该函数越耗时
Samples
在该函数中采样到的次数,反映函数被执行的频率
Children
包含子函数的总开销,显示函数及其调用的所有子函数的总时间
Self
函数自身的开销(不包含子函数),显示函数本身的执行时间
硬件事件监控
复制
# 查看可用的硬件事件
perf list
# 监控多个硬件事件
perf record -e cycles,instructions,cache-misses <命令>
# CPU 分支预测分析
perf record -e branch-misses -g <命令>多核心性能分析
复制
# 按线程分析
perf record -g --per-thread <命令>
# 查看 CPU 核心使用分布
perf report --sort=cpu
# 实时监控各核心负载
perf top --sort=cpu优先优化 Overhead > 10% 的函数
关注缓存未命中率高的代码段
检查是否存在不必要的系统调用
分析多线程程序的负载均衡情况