线上故障排查清单
四维快速排查清单,覆盖 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 | 服务器负载排查案例实战 |