环境准备与工具链:搭建性能排查环境
说实话,很多同学一上来就问我:「老师,性能排查到底从哪开始?」
我的回答永远是——先把你的工具箱备齐了。你想想看,一个木匠没有锯子,怎么干活?性能排查也一样,工具不到位,你连问题在哪都摸不着。
这一章,我就带你把这些家伙事儿都装上。嗯,咱们一步步来。
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
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'」,说明装好了。
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. 知识体系总览
下面这张图,是我自己整理的排查环境搭建逻辑。你照着这个思路来,不会乱。
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,跑一遍。如果每个命令都有正常输出,说明环境搭好了。
好了,工具链就绪。下一章咱们就开始真刀真枪地排查了。记住,工具只是手段,思路才是核心。