跳到主要内容

性能分析

性能分析通常从「自上而下」开始:先用宏观工具定位瓶颈所在的子系统(CPU、内存、IO),再针对具体进程采样深入分析。

perf 基础

perf 是 Linux 内核自带的性能分析工具,基于硬件性能计数器与采样:

perf list # 列出可用事件
perf stat ./program # 统计总览(指令数、缓存命中率等)
perf record -g ./program # 采样并记录调用栈
perf report # 交互式查看热点

perf top 实时显示系统中占用 CPU 最多的函数,适合在线诊断。

火焰图

火焰图由 Brendan Gregg 提出,把 perf 采样的调用栈按宽度可视化,宽度越大代表该函数占用 CPU 时间越长。

perf record -F 99 -a -g -- sleep 30
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

常用脚本来自 FlameGraph 仓库。生成的 SVG 可直接在浏览器中放大查看。

系统级监控

工具关注点
top / htop进程 CPU、内存占用
iostat -xz 1磁盘 IO、await、util
vmstat 1内存、交换、上下文切换
sar -u 1历史 CPU 数据
mpstat -P ALL 1各 CPU 核心使用率

iostat 中的 %util 接近 100% 且 await 显著升高,通常意味着 IO 瓶颈。

内存分析

  • valgrind --tool=massif:分析堆内存使用峰值,适合长期运行的进程。
  • valgrind --tool=memcheck:检测内存泄漏、越界访问、未初始化读取。
  • heaptrack:相比 massif 速度更快、报告更直观,是 C++ 项目的常用选择。
valgrind --tool=memcheck --leak-check=full ./program
heaptrack ./program
heaptrack_gui heaptrack.program.*.gz