2026.05.22 | youres | 13次围观
前言
跑Linux服务器的兄弟们,基本上都经历过这种时刻——半夜收到报警短信,SSH连不上,网站打不开,手心冒汗,大脑一片空白。别慌,Linux服务器故障排查说白了就是一套方法论,掌握了之后,大多数问题都能在10分钟内定位到原因。这篇文章我把自己这些年踩过的坑和总结的排查流程整理出来,希望能帮到大家。
一、故障排查的基本思路
排查服务器故障,最忌讳的就是上来就瞎折腾。我的建议是按照从外到内、从简单到复杂的原则来:
- 先确认故障现象——到底是网站打不开、SSH连不上、还是服务卡死?不同现象对应不同的排查方向。
- 分层排查——网络层、系统层、应用层,逐层缩小范围。
- 看日志——日志是最诚实的证人,90%的故障原因都藏在日志里。
- 不要同时改多个地方——改一个,测试一个,确认有效再继续。
二、网络连接类故障
2.1 服务器无法连接外网
这是最常见的故障之一。排查步骤:
ping网关地址,确认内网通不通ping 8.8.8.8,确认外网IP层通不通nslookup baidu.com,确认DNS解析正不正常- 检查路由表:
ip route show - 检查防火墙规则:
iptables -L -n或firewall-cmd --list-all
如果ping网关都不通,检查网卡状态:ip addr show,看IP地址有没有丢失。很多时候是网卡配置被覆盖了或者DHCP租约到期没续上。
2.2 端口不通的问题
防火墙放行了但外部还是连不上?注意检查这几个点:
- 服务本身是否监听了正确的地址(
ss -tulpn | grep 端口号) - 云服务器的安全组规则是否放行(这个经常被遗忘)
- SELinux是否拦截了(
getenforce查看状态)
三、系统资源类故障
3.1 CPU负载过高
用 top 或 htop 看一下哪个进程在吃CPU。常见原因:
- 死循环代码——Web应用写了个死循环,CPU直接拉满
- 恶意进程——被挖矿了,top里面能看到不认识的进程在跑
- 编译任务——有人在线上服务器编译软件
定位到进程后,kill -9 PID 干掉,然后排查根因。如果是被入侵了,赶紧做安全加固。
3.2 内存不足
内存不足的典型表现是服务变慢甚至被OOM Killer杀进程。快速排查:
free -h看总内存和剩余内存top按M键按内存排序,看谁吃得多- 检查swap使用情况:
swapon --show - 查看被OOM Kill的进程:
dmesg | grep -i oom
临时解决可以清理缓存:sync && echo 3 > /proc/sys/vm/drop_caches,但治标不治本,还是要找到吃内存的元凶。
3.3 磁盘空间满了
这个坑大家踩过太多次了。快速清理:
df -h看哪个分区满了du -sh /*逐层找出大目录- 清理日志:
journalctl --vacuum-time=7d - 清理旧的包缓存:
apt clean或yum clean all - 检查
/tmp目录有没有堆积大量临时文件
四、服务异常类故障
4.1 Web服务(Nginx/Apache)启动失败
最常见的原因是配置文件写错了:
- Nginx:
nginx -t检查配置语法 - 端口被占用:
ss -tulpn | grep :80 - 权限问题:检查网站目录的属主和权限
- SSL证书过期:
openssl x509 -in cert.pem -noout -dates
4.2 数据库(MySQL)故障
- 启动失败先看错误日志:
tail -100 /var/log/mysql/error.log - 常见原因:磁盘满、配置参数错误、表损坏
- 修复表:
mysqlcheck -u root -p --auto-repair --all-databases - 连接数满了:
show processlist;看一下谁占着连接不释放
4.3 Docker容器异常退出
docker ps -a查看所有容器状态docker logs 容器名看退出日志- 资源限制导致OOM:
docker stats看资源使用 - 重启策略没配置好,在docker-compose.yml里加上
restart: always
五、系统无法启动
这是最让人头疼的情况,但别慌,一步步来:
- BIOS/UEFI阶段——检查启动顺序,确认硬盘被识别
- GRUB引导阶段——如果出现
grub rescue>,用Live CD重新安装GRUB - 内核加载阶段——
dmesg看有没有驱动加载失败 - 文件系统检查——进入单用户模式执行
fsck -y /dev/sda1
平时养成快照备份的习惯,遇到启动不了直接回滚是最快的解决办法。
六、排查必备工具清单
| 工具 | 用途 |
|---|---|
top / htop | 实时查看CPU、内存、进程 |
df / du | 磁盘空间查看 |
ss / netstat | 网络连接和端口状态 |
journalctl / tail | 查看系统和服务日志 |
dmesg | 内核消息和硬件信息 |
strace | 跟踪系统调用,排查程序挂起 |
tcpdump | 抓包分析网络问题 |
iotop | 磁盘IO使用情况 |
smartctl | 硬盘健康状态检查 |
nc / telnet | 端口连通性测试 |
七、日常预防比排查更重要
说实话,大部分生产环境的故障都是可以预防的。建议做好这几件事:
- 监控告警——Zabbix、Prometheus,提前发现问题
- 日志轮转——配置logrotate,别让日志把磁盘撑爆
- 定期备份——数据库和配置文件都要备份,异地备份最好
- 资源限制——用cgroup或Docker限制每个服务的资源上限
- 变更记录——每次改配置都要记录,出问题能快速回滚
写在最后
Linux服务器故障排查没有什么捷径,就是多练多总结。每次遇到问题都记下来,下次再遇到类似的就能秒定位。希望这篇文章能帮你在故障来的时候心里有底,不慌不乱。如果你在排查过程中遇到了什么奇葩问题,欢迎在评论区交流。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论