环境准备与工具链:搭建性能排查环境

说实话,很多同学一上来就问我:「老师,性能排查到底从哪开始?」

我的回答永远是——先把你的工具箱备齐了。你想想看,一个木匠没有锯子,怎么干活?性能排查也一样,工具不到位,你连问题在哪都摸不着。

这一章,我就带你把这些家伙事儿都装上。嗯,咱们一步步来。

1. 基础环境搭建

我个人习惯用 Ubuntu 20.04 LTS 或 CentOS 7+ 作为排查环境。为什么?因为这两套系统的包管理最成熟,工具链最全。

先做一件事:确认内核版本。

uname -r
# 期望输出:5.x.x 或 4.18.x 以上

如果内核太老(比如 3.10),我建议你升级一下。我在项目中遇到过老内核 perf 工具缺功能的情况,折腾了半天才发现是内核不支持。

然后安装基础编译工具:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y build-essential linux-tools-common linux-tools-generic

# CentOS/RHEL
sudo yum groupinstall -y "Development Tools"
sudo yum install -y kernel-devel perf
注意: 我曾经在 CentOS 7 上直接 yum install perf,结果装了个空壳子。一定要确认 perf 命令能跑出实际数据,不然白忙活。

2. 必备工具清单

下面这几个工具,是我每次排查必装的。说白了,它们就是你的「五虎上将」。

工具 用途 安装方式
perf CPU 性能事件采样、热点分析 linux-tools-common / perf
top / htop 实时进程监控、资源占用 procps / htop
nvidia-smi GPU 状态监控(NVIDIA 显卡) nvidia-driver 自带
iostat 磁盘 I/O 性能分析 sysstat

3. 逐个工具安装与验证

3.1 perf —— CPU 性能分析的瑞士军刀

perf 这工具,我用了快十年了。它可以直接从内核里拿数据,开销极小。

# 验证安装
perf --version
# 简单测试:统计当前系统 CPU 周期
perf stat sleep 5

如果输出类似「Performance counter stats for 'sleep 5'」,说明装好了。

小技巧: 我习惯把 perf 和火焰图配合使用。先 perf record 采集数据,再用 FlameGraph 脚本生成 SVG 图,一眼就能看出热点在哪。

3.2 top / htop —— 进程级资源监控

top 是标配,htop 是升级版。我个人更爱 htop,因为它可以鼠标操作,颜色也好看。

# 安装 htop
sudo apt-get install htop   # Ubuntu
sudo yum install htop       # CentOS

# 启动
htop

htop 界面里,按 F6 可以按 CPU 或内存排序。我在排查内存泄漏时,经常盯着 RES 列看,哪个进程涨得快,哪个就有问题。

3.3 nvidia-smi —— GPU 状态监控

做推理性能优化,GPU 是核心。nvidia-smi 是 NVIDIA 官方工具,装好驱动就有。

# 查看 GPU 状态
nvidia-smi

# 持续监控(每秒刷新)
watch -n 1 nvidia-smi

重点关注几个指标:

  • GPU-Util:利用率,低于 80% 说明没喂饱
  • Memory-Usage:显存占用,别爆了
  • Temp:温度,超过 85°C 要小心降频

避坑指南: 我曾经遇到一个案例,GPU-Util 只有 30%,但推理延迟很高。后来发现是 CPU 数据预处理太慢,GPU 一直在等数据。所以别只看 GPU,CPU 和 I/O 也得盯着。

3.4 iostat —— 磁盘 I/O 分析

很多人忽略磁盘 I/O,但模型加载、日志写入、数据读取都依赖它。

# 安装 sysstat(包含 iostat)
sudo apt-get install sysstat

# 查看磁盘 I/O(每 2 秒刷新一次)
iostat -x 2

关键字段:

  • %util:磁盘繁忙度,接近 100% 说明 I/O 瓶颈
  • await:平均 I/O 等待时间,超过 10ms 就要注意
  • svctm:服务时间,一般应小于 await

4. 知识体系总览

下面这张图,是我自己整理的排查环境搭建逻辑。你照着这个思路来,不会乱。

推理性能排查环境搭建 性能排查环境 CPU 分析 进程监控 GPU 监控 磁盘 I/O perf top / htop nvidia-smi iostat 关键监控指标 CPU 利用率 / 缓存命中 内存 / 进程状态 GPU-Util / 显存 %util / await

5. 环境验证脚本

工具装完了,怎么确认都能用?我写了个小脚本,一键验证:

#!/bin/bash
# 环境验证脚本

echo "=== 1. 内核版本 ==="
uname -r

echo "=== 2. perf 测试 ==="
perf stat -e cycles,instructions,cache-misses sleep 1 2>&1 | tail -5

echo "=== 3. htop 测试 ==="
htop --version

echo "=== 4. nvidia-smi 测试 ==="
nvidia-smi --query-gpu=name,utilization.gpu,memory.used --format=csv

echo "=== 5. iostat 测试 ==="
iostat -x 1 1 | tail -10

echo "=== 环境准备完成 ==="

把这个脚本保存为 check_env.sh,跑一遍。如果每个命令都有正常输出,说明环境搭好了。

我的习惯: 每次排查新问题前,我都会先跑一遍这个脚本。不是为了检查工具,而是为了看一眼系统当前的状态——有时候问题就藏在某个异常指标里。

好了,工具链就绪。下一章咱们就开始真刀真枪地排查了。记住,工具只是手段,思路才是核心。

可可精品资料库