一、系统性能四大核心要素与健康基线
在线上生产环境或压测场景中定位性能问题时,系统性能瓶颈通常收敛在四个硬件与操作系统维度:CPU、内存、磁盘 I/O 和网络。
| 性能要素 | 核心健康指标 | 亚健康预警阈值 | 严重瓶颈基线 |
|---|---|---|---|
| CPU 占用 | user% + sys% < 70% | user% + sys% ≈ 85% | 持续 >= 90% |
| 内存交换 | Swap In (si) = 0, Swap Out (so) = 0 | 少量页面换入换出 | 频繁大量换页(内存严重不足) |
| 磁盘 I/O | iowait% < 20% | iowait% ≈ 35% | iowait% >= 50% 或 %util 达 100% |
%user:CPU 处于用户态运行的时间百分比;%sys:CPU 处于内核态运行的时间百分比;%iowait:CPU 等待磁盘 I/O 操作完成的空转等待时间占比;si / so:RAM 与 Swap 磁盘交换分区之间的页面导入与导出速率。
二、四大排查工具组合拳
面对线上突发告警,推荐按照自顶向下的组合定位:
text
1. 宏观负载:uptime
│
┌─────────────┼─────────────┐
▼ ▼ ▼
2. CPU/内存 3. 磁盘 I/O 4. 网络带宽
vmstat iostat sar -n DEV1. 宏观负载与核数评估:uptime
bash
uptime
# 输出示例:
# 14:32:05 up 45 days, 19:22, 2 users, load average: 1.15, 2.30, 2.05- 核心指标:
load average分别代表过去 1 分钟、5 分钟、15 分钟内的系统平均活跃进程数(R状态运行中 + D状态不可中断睡眠)。 - 核数判定法则:
- 先执行
grep -c 'processor' /proc/cpuinfo确认逻辑 CPU 核心数 $N$; - 负载长期小于 $N$ 说明系统算力充裕;
- 若 1 分钟负载持续大于 $N$(甚至达到 $2N$),说明出现严重的 CPU 排队或阻塞在不可中断的磁盘/网络 I/O。
- 先执行
2. 综合状态快速透视:vmstat
vmstat 能够在极低开销下连续输出系统的进程调度、内存、Swap、I/O 和 CPU 状态:
bash
vmstat 2 5
# 每 2 秒刷新一次,输出 5 组数据text
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 184520 204800 1204800 0 0 12 45 850 1200 45 8 47 0 0关键列关注指南:
procs.r:处于就绪态运行队列的进程数。若长期大于逻辑 CPU 核数,判定为 CPU 计算瓶颈。procs.b:处于等待资源(通常是磁盘或网络锁)的阻塞进程数。大于 0 需重点查存储。swap.si / so:只要大于 0,说明物理内存用尽,内核正在使用极慢的磁盘做页面置换,是造成服务响应急剧变慢的元凶。cpu.us / sy / wa:us过高查应用代码循环或计算密集逻辑;sy过高查频繁系统调用或上下文切换;wa过高查慢查询或日志刷盘。
3. 存储瓶颈精准下钻:iostat
当发现 iowait 偏高时,使用 iostat -xz 快速定位具体是哪块物理磁盘或挂载卷发生拥堵:
bash
iostat -xz 2 3text
Device r/s w/s rkB/s wkB/s await r_await w_await %util
sda 5.00 85.00 20.00 4500.00 8.20 1.10 8.50 82.50%util:磁盘利用率。如果接近 100%,表示该设备 I/O 请求队列已满,I/O 能力达到极限。await:I/O 请求的平均响应时间(含队列排队时间与实际处理时间,单位毫秒)。一般机械盘应 < 20ms,SSD 应 < 2ms。若await远高于服务时间,说明产生积压。
4. 历史全维度趋势回溯:sar
如果排查的是历史偶发的抖动(非正在发生的问题),使用系统内置的 sar(System Activity Reporter)调取历史时序:
bash
# 查看今日 CPU 历史利用率走势
sar -u
# 查看历史网络设备吞吐与丢包状态
sar -n DEV
# 查看今日内存水位历史
sar -r