返回首页

线上故障排查清单 — CPU/磁盘/内存/GC/网络 四维速查

📅 创建于 2026-05-19 🔄 更新于 2026-05-19 📝 660 字

线上故障排查清单

四维快速排查清单,覆盖 CPU、磁盘、内存、GC、网络五大场景。 核心命令链:df → free → top 三连,然后 jstack → jmap 伺候。 每个维度均提供速查命令 + 详细方法页面入口。


一、CPU 排查

速查命令

# 找到 CPU 最高的进程
top -b -n 1 | head -20

# 找到目标进程内 CPU 最高的线程
top -H -p <PID>

# 线程 ID 转 16 进制(用于 jstack)
printf '%x\n' <TID>

# 查看该线程的 Java 堆栈(-C5 显示上下文 5 行)
jstack <PID> | grep '<nid>' -C5 --color

常见原因

原因 特征 排查工具
业务死循环 单线程占满单核 jstack → 堆栈定位
频繁 GC 多线程交替高 CPU + jstat 显示频繁 YGC/FGC jstat -gcutil
上下文切换过多 cs 值高(vmstat) vmstat / pidstat -w

详细排查流程参见 cpu-spike-troubleshooting-guide(四层定位法)和 cpu-spike-3-commands(三命令速查)。


二、磁盘排查

速查命令

# 整体磁盘使用
df -h

# 目录大小排序(找占用大户)
du -sh /* 2>/dev/null | sort -rh | head -10

# IO 性能
iostat -x 1 3

# 查找被删除但未释放的文件(进程仍持有句柄)
lsof | grep deleted

关键技巧:lsof 找"消失的磁盘空间"

df -h 显示磁盘满,但 du -sh /* 加起来远小于 df 显示值 → 大概率是有进程持有已删除文件的句柄。

lsof | grep deleted | awk '{sum+=$7} END {print sum/1024/1024 " MB 未释放"}'

找到对应进程后 kill 或重启释放空间。

详细调优参见 linux-disk-io-tuning(IO 深度优化)和 linux-disk-space-troubleshooting(空间排查流程)。


三、内存排查

速查命令

# 整体内存状况
free -h

# 进程内存排名
ps aux --sort=-%mem | head -10

# Java 堆内存使用
jmap -heap <PID>

# 导出堆转储(会触发 Full GC,谨慎)
jmap -dump:live,format=b,file=/tmp/heap.bin <PID>

jmap 使用注意事项

  • 生产慎用 -dump:live:会触发 Full GC,可能导致 STW
  • 先用 jmap -histo <PID> | head -20 看对象分布(轻量级,不触发 GC)
  • jmap -heap 可快速查看各代使用情况

内存管理底层原理参见 linux-memory-management-deep-dive(Buffer/Cache/Slab 全链路)。


四、GC 排查

速查命令

# GC 统计(每 1 秒采样)
jstat -gcutil <PID> 1000

# 关键列含义:
# S0/S1 — Survivor 区使用率
# E     — Eden 区使用率
# O     — Old 区使用率
# YGC   — Young GC 次数
# YGCT  — Young GC 总耗时
# FGC   — Full GC 次数
# FGCT  — Full GC 总耗时
# GCT   — GC 总耗时

判断信号

指标 正常 需关注
YGC 频率 几秒~几十秒一次 每秒多次
FGC 极少发生 频繁发生 / 持续增长
Old 区使用率 稳定 持续上升不回落(内存泄漏)
GCT 占比 <5% >10%(GC 严重拖慢应用)

GC 问题往往导致 CPU 飙高,参见 cpu-spike-troubleshooting-guide 中 GC 相关章节。


五、网络排查

速查命令

# 连接状态统计
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn

# 抓包(指定网卡)
tcpdump -i eth0 tcp -w /tmp/capture.cap

# 实时追踪 HTTP 请求
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Connection Reset 诊断

出现 Connection reset by peer 用 tcpdump 抓包验证 RST:

tcpdump -i eth0 tcp -w rst.cap
# 用 Wireshark 打开分析 RST 方向和时间线
  • RST 来自服务端 → 服务端主动关闭连接(应用 crash / 超时 / 防火墙)
  • RST 来自客户端 → 客户端主动断开(应用逻辑 / 连接池配置)
  • Broken pipe → 对已关闭连接继续写数据,通常伴随 Connection Reset

网络排查方法论参见 network-troubleshooting-order(分层七步法)和 nginx-502-504-connection-reset-guide(Nginx 视角)。


六、上下文切换

速查命令

# 系统级上下文切换
vmstat 1 5

# 关键列:
# r  — 运行队列长度(> CPU 核数 × 2 说明 CPU 瓶颈)
# cs — 每秒上下文切换次数(> 50000 需关注)
# sy — 内核态 CPU 占比(高 sy + 高 cs → 上下文切换瓶颈)

# 进程级上下文切换(需安装 sysstat)
pidstat -w -p <PID> 1

优化方向

  • 自愿切换多 → IO 等待,检查磁盘/网络
  • 非自愿切换多 → CPU 时间片用完,检查计算密集型任务
  • cs 持续高位 → 减少线程数 / 优化锁粒度 / 使用无锁数据结构

整体性能排查框架参见 server-performance-four-dimensions(五维排查方法论)和 fullstack-performance-troubleshooting(全栈视角)。


关联页面

页面 关联点
cpu-spike-troubleshooting-guide CPU 排查四层定位法 + jstack 深度使用
cpu-spike-3-commands CPU 飙高三命令速查
server-performance-four-dimensions 五维排查框架(含决策树)
linux-memory-management-deep-dive 内存 Buffer/Cache/OOM 全链路
linux-disk-io-tuning 磁盘 IO 深度调优
linux-disk-space-troubleshooting 磁盘空间排查 + lsof 实战
network-troubleshooting-order 网络分层七步排查法
nginx-502-504-connection-reset-guide Connection Reset 深度诊断
fullstack-performance-troubleshooting Nginx→应用→数据库→服务器全链路
ops-automation-scripts 运维自动化脚本 5 件套(健康巡检/日志告警/MySQL备份/批量执行/服务守护)
linux-essential-commands-reference Linux 30 个高频命令速查(排查场景 → 命令映射表)
journalctl-log-tracking-guide journalctl 日志管理完全指南
tcp-connection-attack-vs-bug TCP 连接数爆表排查:攻击 vs Bug
linux-load-high-cpu-low-troubleshooting Linux Load 高但 CPU 低的排查思路 — 从现象确认到根因定位的系统化诊断流程(含 vm
linux-server-load-case-study 服务器负载排查案例实战