在运维和开发的日常工作中,最让人头疼的时刻莫过于:“服务器突然卡死了!”、“服务访问不通了!”、“磁盘空间莫名其妙满了!”
面对一个冰冷的终端窗口,很多初学者容易陷入“盲目重启”或“随机尝试”的误区。其实,Linux 故障排查有一套标准的方法论。今天,我们就把这套“救火指南”毫无保留地分享给大家,涵盖最常见的故障场景及解决手段,让你在面对线上事故时能保持冷静,精准出击!
🛠 第一部分:故障排查的“通用心法”
在动手敲命令之前,请记住这个四步法:
现象确认:发生了什么?(是响应慢、完全不通,还是报错 500?)
范围锁定:是单机问题还是集群问题?是网络问题还是应用问题?
证据搜集:查看日志
检查资源
抓包分析。
验证修复:修改配置
重启服务
监控观察。
🔍 第二部分:四大常见故障场景及解决手段
1. CPU 飙升(系统卡顿)
症状: 响应缓慢,SSH 登录延迟,uptime 显示 load average 极高。
排查工具: top, htop, vmstat
解决路径:
2. 内存溢出 (OOM)
症状: 进程莫名其妙被 kill 掉,日志中出现 Out of memory: Kill process。
3. 磁盘空间/Inode 耗尽
症状: 无法创建新文件,数据库报错 No space left on device,但 df -h 显示还有空间。
4. 网络不通/延迟高
症状: 无法访问服务,端口连接超时,丢包严重。
排查工具: ping, telnet, netstat/ss, tcpdump, mtr
解决路径:
🧪 第三部分:故障模拟实战(手把手带你练)
为了让大家有体感,我们模拟三个经典故障场景。你可以自己在虚拟机上尝试。
场景 A:诡异的“磁盘空间不足”
【模拟】:你删除了一个 10G 的日志文件 rm -f access.log,但 df -h 显示空间依然被占用。
场景 B:服务启动失败,但没有报错
【模拟】:执行 ./start.sh 没有任何输出,但服务没起来。
场景 C:CPU 负载高,但 CPU 使用率低
【模拟】:top 显示 Load Average 是 10,但 %Cpu(s) 的 us (用户态) 只有 5%。
原因:这种情况通常是 I/O 等待 (Wait) 过高,CPU 在等磁盘读写。
排查:top 中查看 %wa 指标 iostat -x 1 10 查看磁盘利用率 %util。
解决:优化数据库查询,检查磁盘是否有坏道,或更换 SSD。
📚 第四部分:常用排查命令清单(建议收藏)
| 维度 | 命令 | 用途 |
|---|
| 整体状态 | uptime, top, htop | 查看负载、CPU、内存概况 |
| 内存分析 | free -m, vmstat 1 | 查看虚拟内存、交换分区、内存页 |
| 磁盘分析 | df -h, du -sh, df -i | 查看磁盘容量、目录大小、Inode |
| I/O 分析 | iostat -x 1, iotop | 查看磁盘读写吞吐、等待时间 |
| 网络分析 | ss -ntlp, netstat -anp | 查看端口监听、连接状态 |
| 网络抓包 | tcpdump -i eth0 port 80 | 实时捕获网络数据包 |
| 日志查询 | tail -f, grep, journalctl | 快速检索错误日志 |
| 进程追踪 | strace -p <pid> | 追踪系统调用(终极武器) |
💡 结语
Linux 故障排查没有所谓的“银弹”,核心在于“由浅入深,由表及里”。先看整体资源,再看具体进程,最后分析系统调用和网络包。
建议每一位运维/开发人员在自己的笔记中建立一个“故障库”:现象 原因 解决方案 预防措施。
只有经历过足够多的“救火”现场,你才能在面对故障时,一眼看出问题的症结所在!