3. 环境准备:安装必要的工具链
在开始生成和分析火焰图之前,必须构建一个完整、可用的性能分析工具链。本章将指导你完成 perf、FlameGraph 脚本集 以及 bcc/eBPF 工具 的安装,并说明内核配置的最低要求。一个正确的环境是后续所有实验的基础,请务必按步骤验证。
3.1 内核配置要求
火焰图依赖内核的 perf_events 和 eBPF 子系统。大多数现代发行版(如 Ubuntu 20.04+、CentOS 8+、Fedora)默认已开启这些选项。但如果你使用自定义内核或嵌入式环境,请确认以下配置项已启用:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
CONFIG_PERF_EVENTS | perf 事件子系统核心 | y |
CONFIG_HW_PERF_EVENTS | 硬件性能计数器支持 | y |
CONFIG_BPF | eBPF 核心支持 | y |
CONFIG_BPF_SYSCALL | eBPF 系统调用接口 | y |
CONFIG_DEBUG_INFO_BTF | BPF 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。
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