- 作者:小梦
- 发表时间:2026-03-05
- 来源:原创
🔍 引言:故障排查是运维的必修课
无论你的云服务器配置多高、架构多完善,故障终有一天会不期而至——网站突然打不开、SSH连接超时、数据库响应变慢……面对这些突发状况,手足无措只会延长业务中断时间。掌握一套系统化的故障排查方法,能让你在混乱中迅速定位根源,恢复服务。
本文基于真实的一线运维经验,按照“先连通、后性能、再日志”的逻辑,梳理了云服务器最常见的故障场景及实战排查命令。无论你是新手还是老手,这份指南都能帮你节省宝贵的时间。
🔌 一、连接故障:SSH无法登录、服务端口不通
当你无法通过SSH连接到服务器,或者Web服务无法访问时,不要慌张。按照以下步骤逐步排查:
1. 本地网络检查
- ping 测试:
ping 你的服务器IP,检查网络是否可达。如果丢包或超时,可能是本地网络或云服务商骨干网问题。 - traceroute 路由追踪:
traceroute 服务器IP,查看在哪一跳中断,判断是否为中间网络故障。
2. 安全组/防火墙检查
登录云厂商控制台,检查安全组规则是否开放了对应端口(如SSH的22端口)。如果使用Linux iptables或firewalld,登录VNC(或使用云厂商的“管理终端”)检查:
# 查看iptables规则
sudo iptables -L -n
# 临时关闭防火墙(仅测试)
sudo systemctl stop firewalld
3. 服务进程检查
登录服务器后,检查SSH服务是否运行:
sudo systemctl status sshd
# 或
ps aux | grep sshd
如果服务未运行,尝试启动:sudo systemctl start sshd。同时检查端口监听:netstat -tunlp | grep 22。
⚡ 二、性能故障:CPU飙升、内存泄漏、负载高
服务器响应缓慢,通常由资源耗尽引起。我们借助Linux内置工具快速定位。
1. 整体负载查看
uptime # 查看1/5/15分钟平均负载
top # 动态查看进程资源占用
htop # 更友好的top
2. CPU排查
在top中按P(大写)按CPU使用率排序,找出消耗CPU的进程。进一步查看线程:
top -H -p 进程PID # 查看进程内线程
3. 内存排查
使用 free -h 查看内存总量和剩余。若内存不足,用 ps aux --sort=-%mem 按内存使用排序。Java应用内存泄漏可用 jmap 或 jstat 分析。
4. 经典案例:CPU飙升紧急处理
某次线上故障中,CPU持续100%。通过 perf top 发现是内核函数 _raw_spin_unlock_irqrestore 占用高,最终定位为某个Java线程死循环。使用 kill -3 生成线程堆栈分析后解决。
💾 三、磁盘与存储故障:写满、inode耗尽、IO延迟
磁盘故障常表现为“No space left on device”或服务无法写入。
1. 磁盘容量检查
df -h # 查看分区使用率
du -sh /* 2>/dev/null | sort -hr | head -10 # 找出根目录下最大的10个文件/目录
2. inode耗尽
即使磁盘有剩余空间,inode耗尽也会导致无法创建文件。检查方法:
df -i # 查看inode使用率
# 查找包含大量小文件的目录
find / -xdev -type f | cut -d/ -f2 | sort | uniq -c | sort -nr
3. IO延迟排查
使用 iostat -x 1 查看磁盘I/O负载,关注 %util 和 await。若 %util 接近100%,磁盘已达瓶颈。可用 iotop 定位具体进程。
🌐 四、网络故障:丢包、延迟、防火墙规则
网络问题往往涉及链路、路由、端口等多个层面。
1. 连通性测试
- ping 测试丢包率和RTT。
- telnet 或 nc 测试端口:
nc -zv 目标IP 端口。 - traceroute 检查路由路径。
2. 抓包分析
用 tcpdump 捕获数据包,检查是否有重传或异常:
sudo tcpdump -i eth0 host 目标IP and port 80 -w capture.pcap
抓包后可用Wireshark分析,或配合 tshark。
3. 防火墙与安全组
除了云厂商控制台,还要检查服务器内部防火墙。例如 iptables -L -n 或 firewall-cmd --list-all。
📋 五、日志与内核故障:从messages到dmesg
当一切排查无果时,日志往往藏着答案。
1. 系统日志
dmesg -T | tail -50 # 内核日志,查看硬件/驱动错误
journalctl -xe # systemd日志,查看服务启动失败原因
cat /var/log/messages | grep -i error # 通用系统日志
2. 应用日志
Nginx日志:/var/log/nginx/error.log;MySQL日志:/var/log/mysql/error.log。结合 tail -f 实时监控。
✅ 总结:故障排查心法
故障排查没有万能药,但遵循一套方法论能让你少走弯路:
- 先外部后内部: 从网络、安全组入手,再登录服务器。
- 先资源后应用: 检查CPU、内存、磁盘,再定位具体进程。
- 先日志后猜测: 用数据说话,避免主观臆断。
- 先止损后根治: 紧急情况下先重启或回滚,再分析根本原因。
此外,建议平时就建立故障文档库,记录每次事故的根因和解决步骤。这样,当下次类似故障发生时,你就能快速应对。