3. 环境准备:安装必要的工具链

在开始生成和分析火焰图之前,必须构建一个完整、可用的性能分析工具链。本章将指导你完成 perf、FlameGraph 脚本集 以及 bcc/eBPF 工具 的安装,并说明内核配置的最低要求。一个正确的环境是后续所有实验的基础,请务必按步骤验证。

Linux 内核性能分析工具链架构 Linux 内核(需开启 CONFIG_PERF_EVENTS、BPF_SYSCALL 等) perf 工具(perf_events 子系统) bcc / eBPF 工具链 FlameGraph 脚本集(生成 SVG 火焰图) 数据流方向:内核事件 → 采样/跟踪 → 火焰图可视化

3.1 内核配置要求

火焰图依赖内核的 perf_events 和 eBPF 子系统。大多数现代发行版(如 Ubuntu 20.04+、CentOS 8+、Fedora)默认已开启这些选项。但如果你使用自定义内核或嵌入式环境,请确认以下配置项已启用:

配置项说明推荐值
CONFIG_PERF_EVENTSperf 事件子系统核心y
CONFIG_HW_PERF_EVENTS硬件性能计数器支持y
CONFIG_BPFeBPF 核心支持y
CONFIG_BPF_SYSCALLeBPF 系统调用接口y
CONFIG_DEBUG_INFO_BTFBPF Type Format,bcc 工具依赖y
CONFIG_KPROBES动态探针,用于 bcc 跟踪内核函数y
CONFIG_FTRACE函数跟踪器,perf 和 bcc 的辅助y
验证方法: 运行 zcat /proc/config.gz | grep -E 'CONFIG_PERF_EVENTS|CONFIG_BPF|CONFIG_DEBUG_INFO_BTF'。如果输出为 =y 或 =m,则满足要求。若文件不存在,可尝试 cat /boot/config-$(uname -r)。

3.2 安装 perf 工具

perf 是 Linux 内核官方性能分析工具,通常包含在 linux-tools-common 包中。不同发行版的安装命令略有差异:

  • Debian / Ubuntu: sudo apt install linux-tools-common linux-tools-$(uname -r)
  • RHEL / CentOS / Fedora: sudo dnf install perf 或 sudo yum install perf
  • openSUSE: sudo zypper install perf
  • Arch Linux: sudo pacman -S linux-tools

安装完成后,验证 perf 是否可用:

perf --version
# 期望输出类似:perf version 5.15.0
常见问题: 如果提示 WARNING: perf not found for kernel x.x.x,说明内核头文件未安装。请执行 sudo apt install linux-headers-$(uname -r)(Ubuntu)或 sudo dnf install kernel-devel(RHEL)。

3.3 安装 FlameGraph 脚本集

FlameGraph 是 Brendan Gregg 开发的 Perl 脚本集合,用于将 perf 或 bcc 的输出转换为 SVG 火焰图。推荐从 GitHub 仓库克隆:

# 克隆到本地目录(例如 /opt 或 ~/tools)
git clone https://github.com/brendangregg/FlameGraph.git /opt/FlameGraph

# 将脚本目录加入 PATH(可选,方便调用)
echo 'export PATH=$PATH:/opt/FlameGraph' >> ~/.bashrc
source ~/.bashrc

核心脚本说明:

脚本名称功能
stackcollapse-perf.pl将 perf 的采样输出折叠为单行堆栈格式
stackcollapse-bpftrace.pl将 bpftrace 输出折叠为堆栈格式
flamegraph.pl根据折叠后的堆栈数据生成 SVG 火焰图
difffolded.pl比较两个折叠文件的差异,生成差分火焰图
验证安装: 运行 ls /opt/FlameGraph/*.pl | head -5,应看到至少 flamegraph.pl 和 stackcollapse-perf.pl 存在。

3.4 安装 bcc / eBPF 工具

bcc(BPF Compiler Collection)提供了一系列基于 eBPF 的动态跟踪工具,适合分析内核和用户态性能。安装方式同样因发行版而异:

  • Ubuntu 20.04+: sudo apt install bpfcc-tools linux-headers-$(uname -r)
  • Fedora 33+: sudo dnf install bcc-tools
  • RHEL / CentOS 8+: sudo dnf install bcc-tools(需启用 EPEL 和 PowerTools)
  • 从源码编译(通用): 参考 bcc 官方安装指南

安装后,bcc 工具通常位于 /usr/share/bcc/tools 或 /usr/sbin。常用工具包括:

工具名用途
profile定时采样 CPU 堆栈,类似 perf record,但支持 eBPF 过滤
offcputime跟踪线程被阻塞(off-CPU)的时间及堆栈
runqlat统计 CPU 调度延迟分布
biolatency统计块 I/O 延迟分布
execsnoop跟踪进程执行事件
验证 bcc 是否正常工作: 运行 sudo /usr/share/bcc/tools/execsnoop,然后在另一个终端执行 ls,应看到 execsnoop 输出进程创建事件。如果提示 Failed to load BTF,请检查内核是否开启 CONFIG_DEBUG_INFO_BTF。
bcc 工具生成火焰图流程 bcc 工具(profile) 原始堆栈输出 stackcollapse-bpf.pl 折叠堆栈文件 flamegraph.pl 火焰图 SVG 示例命令 sudo profile -af 99 > out.stacks && stackcollapse-bpf.pl out.stacks > out.folded && flamegraph.pl out.folded > flame.svg

3.5 环境验证清单

完成安装后,建议执行以下快速验证,确保所有组件可正常协作:

# 1. 验证 perf 采样
sudo perf record -F 99 -a -g -- sleep 2
sudo perf script > out.perf

# 2. 验证 FlameGraph 折叠
/opt/FlameGraph/stackcollapse-perf.pl out.perf > out.folded

# 3. 验证火焰图生成
/opt/FlameGraph/flamegraph.pl out.folded > test.svg

# 4. 验证 bcc 工具
sudo /usr/share/bcc/tools/profile -af 1 > /dev/null && echo "bcc OK"

如果以上命令均无报错,说明你的环境已准备就绪,可以进入下一章学习火焰图的生成实战。

推荐配置总结:
  • 内核版本 ≥ 4.9(推荐 5.x 以上以获得最佳 eBPF 支持)
  • perf 版本与内核版本匹配
  • FlameGraph 脚本集保持最新(定期 git pull)
  • bcc 工具版本 ≥ 0.18.0