📖 知识点简介
服务器出问题,能最快定位根因的能力就是性能监控。Linux 自带了一套性能诊断工具链,覆盖 CPU、内存、磁盘 IO、网络四大维度。掌握这些命令,可以在不装任何第三方工具的情况下,快速回答:「系统到底卡在哪?」
🛠 核心命令整理
1. CPU 监控
| 命令 | 用途 | 示例 |
|---|---|---|
top |
实时查看进程 CPU/内存占用 | top -bn1 一次性输出 |
htop |
top 增强版(需安装) | 交互更友好 |
mpstat -P ALL 1 |
每核 CPU 使用率,每秒刷新 | 排查单核打满 |
uptime |
显示负载均值 load average | load > CPU核数 → 过载 |
top 关键字段说明:
us--- 用户态 CPU 占比sy--- 内核态 CPU 占比(过高说明系统调用密集)wa--- I/O 等待(过高 → 磁盘有瓶颈)id--- 空闲百分比st--- 被虚拟机偷走的 CPU(VM 环境常见)
2. 内存监控
| 命令 | 用途 | 关键参数 |
|---|---|---|
free -h |
查看内存总量/已用/可用 | -h 人类可读 |
vmstat 1 5 |
每 1 秒采样 5 次,含内存&CPU | si/so 是 swap 换入/换出 |
cat /proc/meminfo |
内存细粒度信息 | 含 PageCache、Slab 等 |
CPU + 内存二合一: vmstat 1
text
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 123456 1024 456789 0 0 12 34 567 890 12 3 85 0 0
r:正在运行的进程数(CPU 排队),大于 CPU 核数说明 CPU 是瓶颈b:阻塞在 I/O 的进程数(磁盘或网络)si / so:swap 换入/换出,持续不为 0 → 内存不足
3. 磁盘 I/O 监控
| 命令 | 用途 | 关键参数 |
|---|---|---|
iostat -x 1 |
磁盘 I/O 详细报告 | -x 扩展输出,1 每秒刷新 |
iotop |
实时看哪个进程在疯狂 IO | 需 root |
df -h |
磁盘空间使用率 | |
du -sh * |
当前目录大小排序 | 配合 sort -hr 使用 |
lsblk |
查看块设备挂载关系 |
iostat 关键指标(关注点):
%util--- 磁盘繁忙率(> 80% 为瓶颈)r/s + w/s--- 每秒读写次数(IOPS)rkB/s + wkB/s--- 每秒吞吐量await--- I/O 平均等待时间(ms),越大越慢svctm--- I/O 服务时间(越接近 await 说明磁盘本身慢)
4. 网络监控
| 命令 | 用途 | 关键参数 |
|---|---|---|
ss -tuln |
查看监听端口(替代 netstat) | -t TCP, -u UDP |
sar -n DEV 1 |
网卡流量实时统计 | |
iftop |
进程级别带宽占用 | 需安装 |
ping -c 10 |
延迟与丢包检测 |
5. 历史回溯(sar 神器)
sar 是 sysstat 包提供的系统活动报告器,可以回溯过去的数据。
bash
# 查看今天整天的 CPU 使用率
sar -u
# 查看内存使用
sar -r
# 查看磁盘 I/O
sar -b
# 查看网络流量
sar -n DEV
💡 排查顺序建议: CPU 负载 → 内存使用 → 磁盘 I/O → 网络 → 应用日志 --- 逐层排查,不要跳跃。
🔧 实操示例:5 分钟定位服务器卡顿
场景: 接到告警,某 Web 服务器响应变慢,SSH 进去操作有延迟感。
bash
# 第一步:看整体负载
uptime
# 输出:load average: 8.12, 6.34, 3.21 → 8核CPU,负载超8,异常
# 第二步:看 CPU 分布
top -bn1 | head -5
# wa 飙到 35% → I/O 瓶颈
# 第三步:查磁盘 I/O
iostat -x 1 3
# sda: %util 92%, await 450ms → 磁盘扛不住了
# 第四步:定位哪个进程在写磁盘
iotop -o -P
# 发现 mysqld 进程正在大量写数据
# 第五步:确认 mysql 具体问题
mysql -e "SHOW PROCESSLIST;"
# 发现一条慢查询锁表导致大量写入
# 结论:慢 SQL 锁表 → 数据库夯住 → 磁盘写入堆积 → 系统响应变慢
⚠️ 常见坑点 & 注意事项
free -m看到的 used 不等于真实占用 --- Linux 用空闲内存做缓存(buff/cache),当应用需要时内核会释放,所以看available列而不是free列top的 %CPU 可能超过 100% --- 这是多核累加值,单进程跑满 8 核显示 800%- 磁盘 %util 到 100% 不一定是瓶颈 --- SSD 高 IOPS 场景下 100% 持续是正常的,要结合
await看(超过 50ms 才报警) vmstat的r列 > CPU 核数 × 2 --- 说明 CPU 排队严重,需要扩容或优化- 不要只看瞬时值 --- 用
sar看趋势,或者用vmstat 1 10看 10 个采样点的平均值 - 别忘了系统日志 ---
dmesg | tail和/var/log/messages经常藏着 OOM、磁盘 I/O error 等关键线索
💡 一句话总结: 性能排查三板斧 ---
uptime看负载,top看分布,iostat/vmstat定维度。找到短板,对症下药。