云服务器故障排查实战:从入门到精通
  • 作者:小梦
  • 发表时间: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应用内存泄漏可用 jmapjstat 分析。

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负载,关注 %utilawait。若 %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 -nfirewall-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、内存、磁盘,再定位具体进程。
  • 先日志后猜测: 用数据说话,避免主观臆断。
  • 先止损后根治: 紧急情况下先重启或回滚,再分析根本原因。

此外,建议平时就建立故障文档库,记录每次事故的根因和解决步骤。这样,当下次类似故障发生时,你就能快速应对。

📌 行动建议: 打印一张“故障排查速查表”,贴在工位旁。下次服务器出问题时,按步骤操作,你会发现原来问题并不复杂。