返回首页

服务器负载过高排查 — 案例实战 / Netflix 60 秒法 / 常见根因

📅 创建于 2026-05-11 🔄 更新于 2026-05-11 📝 536 字

服务器负载过高排查

负载高 ≠ CPU 高。负载高可能来自 I/O 瓶颈、CPU 瓶颈、内存瓶颈或网络瓶颈。 排查本质是找到瓶颈资源的过程。

Netflix 60 秒法则

登录服务器后前 60 秒内执行标准命令序列,快速建立整体认知:

# ── 第 1~5 秒 ──
uptime                          # load average
dmesg -T | tail -10             # kernel errors

# ── 第 6~15 秒 ──
vmstat 1 3                      # procs/memory/io/system/cpu
mpstat -P ALL 1 3               # per-CPU breakdown

# ── 第 16~25 秒 ──
pidstat -u 1 3                  # per-process CPU
pidstat -d 1 3                  # per-process IO

# ── 第 26~35 秒 ──
iostat -xzm 1 3                 # disk IOPS & latency
free -h -w                      # memory pressure

# ── 第 36~45 秒 ──
sar -n DEV 1 3                  # network throughput
sar -n TCP,ETCP 1 3             # TCP retransmits, listen drops

# ── 第 46~60 秒 ──
top -bn1                        # process snapshot
ss -s                           # connection summary

判断标准:

  • wa 高 + b 列高 → I/O 瓶颈
  • us / sy 高 + r 列高 → CPU 瓶颈
  • si/so 持续不为 0 → 内存不足(swap 频繁)
  • cs 高 + sy 高 → 上下文切换过多

实战案例:日志 IO 打满

电商平台促销期间,24 核 / 32GB 服务器,load average 从 5~8 飙升至 42+,P99 响应从 200ms 到 3800ms。

全局扫描

┌─ uptime: 42.35, 28.17, 15.42
├─ top: wa=53.8%, id=32.1%      → I/O 瓶颈
├─ vmstat: b=38, r=3             → 38 进程阻塞在 I/O
├─ free: Mem OK, Swap 3G used    → 轻度内存压力
└─ 结论:I/O 瓶颈,非 CPU

定位 I/O 源头

┌─ iostat:  w/s=4500, w_await=112ms, %util=98.7%
├─ iotop:   Java 进程 320MB/s 写入,IO> 95.2%
├─ pidstat: Java PID=3456, 320MB/s
├─ lsof:    fd→app.log(deleted) + fd→app.log.1
└─ 结论:日志双文件写入打满磁盘

根因链路

DEBUG 日志(20MB/min → 20GB/min)
  → logrotate 用 create(非 copytruncate)
    → Java 进程仍在写入旧文件 app.log.1
      → IO 翻倍 → 磁盘打满 → 进程排队 → load 飙升

恢复与修复

# 临时恢复
kill -USR1 <PID>                  # 日志框架重载
: > /proc/<PID>/fd/<FD_NUMBER>    # 清空 deleted 文件内容

# 长期方案:logrotate copytruncate + 异步日志 + 独立分区

常见根因速查

根因 典型信号 排查方向
日志 IO 打满 wa 高, iotop 显示日志进程高 IO 检查日志级别 + logrotate 配置
DB fsync 瓶颈 wa 高, iostat 写延迟高, MySQL 进程 innodb_flush_log_at_trx_commit=1 + sync_binlog=1
TIME_WAIT 堆积 ss -s 大量 timewait, listen drops tcp_tw_reuse + 连接池
apt-check 后台 IO 低配服务器 wa>90%, iotop 显示 apt-check systemctl disable apt-daily.timer
内存不足 + swap si/so > 0, free available 低 加内存或优化应用
上下文切换过多 cs 高 + sy 高, vmstat 线程池/连接池优化

生产排查纪律

① 不要盲目重启 — 重启清除现场,根因可能永远丢失
② 先采集数据再操作 — kill/rm/restart 前保存关键指标
③ 判断要有数据支撑 — "wa=53.8%、b=38" 而非"我觉得是 IO"
④ 灰度执行 — 多节点先验证一个,确认再推全量
⑤ 回滚方案提前准备 — 改配置前先备份
⑥ 变更记录完整 — 记入故障复盘报告

关联页面

页面 关联点
linux-load-average-guide Load Average 理论 + 排查五步法
server-performance-four-dimensions 五维排查总纲与决策树
linux-disk-space-troubleshooting 磁盘空间排查(lsof deleted / logrotate + 生产清理流程)
fullstack-performance-troubleshooting 应用层性能排障方法论
network-troubleshooting-order 网络排障(TIME_WAIT 等)
linux-load-high-cpu-low-troubleshooting Linux Load 高但 CPU 低的排查思路 — 从现象确认到根因定位的系统化诊断流程(含 vm
nfs-troubleshooting-sop NFS 故障排查 SOP — 7 步排查法 / 6 类故障 / 4 大实战案例 / 生产最佳实践
linux-perf-troubleshooting-handbook Linux 服务器性能排查实战手册 — 60 秒快速摸底/4 大瓶颈排查/3 个实战案例/监控阈值/
ops-automation-scripts 运维自动化脚本 5 件套(健康巡检/日志告警/批量执行)