Linux 线上排障顺序:CPU、内存、磁盘与网络
线上排障最重要的是保留现场并建立顺序。不要一看到 CPU 高就重启,也不要同时改五个参数。先确认影响范围和起始时间,再从系统资源缩小到进程、线程、文件和具体调用。
第一步:建立全局快照
date
uptime
free -h
df -hT
df -ih
ps -eo pid,ppid,stat,%cpu,%mem,rss,etimes,comm --sort=-%cpu | head
ss -s
dmesg -T | tail -100
同时记录发布、流量、定时任务和依赖告警。Load Average 高不等于 CPU 一定满,它也可能来自不可中断 I/O 等待。看运行队列、CPU 使用和进程状态一起判断。
CPU 高
先定位进程和线程:
pidstat -u -p ALL 1
top -H -p <pid>
Java 可把线程 ID 转十六进制对应 Thread Dump;Go 服务使用 pprof;原生程序可用 perf top 或 perf record。不要只看某一秒 Top,确认是持续占用还是短时尖峰。
内存高
free 中可用内存比 free 列更有意义,Linux 会利用空闲内存做缓存。进程 RSS 持续增长时:
cat /proc/<pid>/status
cat /proc/<pid>/smaps_rollup
ps -eLf | awk '$4 == <pid> {count++} END {print count}'
检查语言堆、线程数、mmap、共享内存和页缓存。若进程突然消失,查看内核日志是否 OOM Kill。Swap 活跃要看持续换入换出,而不是只看“用了多少”。
磁盘与 I/O
iostat -xz 1
pidstat -d 1
du -xhd1 /var | sort -h
lsof +L1
df 满但 du 对不上,常见原因是文件已删除但仍被进程打开,lsof +L1 可找到。Inode 满时即使还有容量也无法创建文件,需检查 df -i。不要在繁忙根目录直接运行无限制 du /,会加重 I/O。
网络问题
ss -lntp
ss -ant state time-wait | wc -l
ip -s link
dig api.example.com
curl -v --connect-timeout 3 --max-time 10 "$TARGET_URL/health"
按 DNS、路由、TCP 建连、TLS、HTTP 响应分层定位。连接超时与读取超时含义不同;大量 SYN-SENT 表示建连问题,大量连接堆在某一状态需要结合服务端和 NAT 检查。
排障纪律
- 先采集再重启,至少保存日志、指标和进程状态。
- 一次只验证一个假设,记录命令和时间。
- 避免使用可能放大故障的全盘扫描或高频 Trace。
- 恢复后写清根因、触发条件、发现方式和长期措施。

评论
0 条讨论