Skip to content

一、系统性能四大核心要素与健康基线 ​

在线上生产环境或压测场景中定位性能问题时,系统性能瓶颈通常收敛在四个硬件与操作系统维度:CPU、内存、磁盘 I/O 和网络。

性能要素核心健康指标亚健康预警阈值严重瓶颈基线
CPU 占用user% + sys% < 70%user% + sys% ≈ 85%持续 >= 90%
内存交换Swap In (si) = 0, Swap Out (so) = 0少量页面换入换出频繁大量换页(内存严重不足)
磁盘 I/Oiowait% < 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 DEV

1. 宏观负载与核数评估: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 3
text
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

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win