故障排查的黄金法则
服务器出问题不要慌,按这个顺序排查:先整体后局部,先系统后应用,先看日志再看配置。90% 的问题都能通过下面这套 SOP 定位到。
场景一:服务器突然变卡
1. 先看整体负载
第一步永远是 top 或 htop:
关注三个数字(Load Average):0.50, 0.80, 1.20。这三个值分别代表 1 分钟、5 分钟、15 分钟的平均负载。如果第一个数字远大于 CPU 核心数,说明系统过载了。
2. 定位高 CPU 进程
在 top 界面按 P(大写)按 CPU 使用率排序,最上面的就是元凶。记下它的 PID。
也可以用 ps 命令:
找到进程后,用 strace -p PID 看看它在做什么系统调用。
3. 如果是内存问题
注意 available 列,不是 free 列。Linux 会把空闲内存拿来做缓存,free 值小是正常的。available 接近 0 才是真不够了。
找内存大户:
场景二:磁盘空间满了
1. 确认磁盘状态
如果某分区 Use% 到 100%,马上清理。先定位是哪个目录占用了大量空间:
这条命令列出根目录下各子目录的大小,从大到小排列。通常罪魁祸首是 /var/log(日志)或 /tmp(临时文件)。
2. 清理日志文件
删除超过 30 天的日志:
查找大于 100MB 的文件:
3. inode 耗尽也要注意
有时候 df -h 显示还有空间但写不进去文件,可能是 inode 用完了:
场景三:网络不通
1. 本地网络是否正常
如果能 ping 通外网 IP 但域名不通→ DNS 问题,检查 /etc/resolv.conf
2. 端口是否在监听
或使用更快的 ss -tlnp。确认你的服务端口是否在 LISTEN 状态。
3. 查看正在使用的端口
看看 80 端口被哪个进程占用了。如果一个端口被意外占用,可以用 kill 终止它。
4. 真连不上?抓包分析
看 HTTP 请求到底发出去没有、有没有收到响应。
场景四:服务起不来
1. 看日志是第一要务
systemd 管理的服务:
查看最近的 50 条 nginx 日志,通常错误信息会直接告诉你原因。
传统日志文件:
2. 检查端口冲突
最常见的原因是端口被占用。用上面的 lsof -i :端口号 检查。
3. 检查配置文件语法
以 Nginx 为例:
大多数服务都有类似的配置检查命令,改完配置后先检查再重启。
终极大招:系统日志
实在找不到原因时,这两条命令能救命:
内核消息和系统日志包含了所有硬件、驱动、系统级错误的记录。如果这里有 OOM Killer(内存不足杀进程)或磁盘 I/O 错误的记录,问题根源就找到了。