故障排查实战手册:从场景到命令的运维指南

在IT运维的日常中,故障如同潜藏在暗处的刺客,往往在业务高峰期不期而至。面对告警风暴和业务中断的压力,运维人员若仅凭经验“盲人摸象”,极易陷入排查泥潭。本手册旨在沉淀标准化的故障排查范式,按核心场景拆解排查思路与命令,助你在危机时刻稳扎稳打,一击必中。


场景一:网络连通性故障

网络是系统的命脉,网络不通则一切皆休。此类故障通常表现为应用报连接超时或拒绝连接。

排查思路:

遵循“自底向上”原则,依次排查物理层、链路层、网络层、传输层及应用层。先确认本机网络栈,再测网关,再测目标端,最后排查端口与防火墙。

核心命令:

  1. 检查本机网络栈:

```bash

ip addr show # 确认网卡状态、IP地址及子网掩码是否正确

ping 127.0.0.1 # 确认本机TCP/IP协议栈是否正常

```

  1. 测试链路连通性:

```bash

ping <目标IP> # 测试网络层是否可达

traceroute <目标IP> # 追踪路由跳数,定位断点在哪个网关/节点

```

  1. 排查端口与服务:

```bash

telnet <目标IP> <端口> # 传统测试端口连通性

nc -zv <目标IP> <端口> # 更强大的端口探测工具

```

  1. 排查DNS与防火墙:

```bash

nslookup <域名> # 确认DNS解析是否正确

iptables -L -n # 检查本机防火墙规则是否拦截

tcpdump -i eth0 host <目标IP> and port <端口> # 抓包分析,确认包是否发出及返回

```


场景二:系统性能瓶颈

系统变慢、请求堆积,此类故障往往呈现渐进式恶化。核心矛盾通常集中在CPU、内存、磁盘I/O三大资源争用上。

排查思路:

先通过全局监控工具定位瓶颈资源(是CPU跑满?还是内存耗尽?还是磁盘卡顿?),再细化到具体进程,最后深入进程内部排查线程级问题。

核心命令:

  1. 全局资源概览:

```bash

top / htop # 实时查看CPU、内存占用,关注load average和us/sy占比

vmstat 1 5 # 观察上下文切换(cs)、中断(in)及CPU运行队列(r)

```

  1. CPU排查(高CPU占用):

```bash

pidstat -u 1 # 按进程实时输出CPU使用率

top -H -p # 查看指定进程的线程CPU占用

perf top # 实时分析CPU在哪些函数上消耗时间

```

  1. 内存排查(OOM或高内存占用):

```bash

free -h # 查看整体内存使用,关注buff/cache及available

pidstat -r 1 # 按进程实时输出内存使用率

pmap -x # 查看进程具体内存映射分布

dmesg -T | grep -i oom # 检查内核是否触发过OOM Killer

```

  1. 磁盘I/O排查(高负载或卡顿):

```bash

iostat -dx 1 # 关注%util(使用率)和await(等待时间)

iotop # 查看哪个进程在疯狂读写磁盘

```


场景三:服务与进程异常

服务不可用、进程频繁崩溃重启是常见的应用层故障。此类问题需结合系统日志与应用日志联合分析。

排查思路:

确认进程状态 -> 追踪退出原因 -> 检查依赖环境 -> 分析应用日志。

核心命令:

  1. 确认进程状态:

```bash

systemctl status # 查看服务状态、主PID及最近日志片段

ps -ef | grep <关键字> # 确认进程是否真的存活

```

  1. 深度分析崩溃原因:

```bash

journalctl -u --since "10 min ago" # 查看服务最近10分钟的系统日志

dmesg -T | tail -20 # 排查是否因内核错误(如段错误Segfault)杀死进程

strace -p # 追踪系统调用,定位进程卡死在哪个系统调用上

```

  1. 端口与文件句柄检查:

```bash

ss -tlnp | grep <端口> # 确认服务是否真正监听在预期端口上

lsof -p # 查看进程打开的文件句柄,排查句柄泄露

```


场景四:磁盘与文件系统故障

磁盘满、Inode耗尽、文件系统只读,这类故障会导致应用无法写入数据,甚至引发系统崩溃。

排查思路:

先查空间使用率,再查Inode使用率,接着排查隐藏文件与挂载点覆盖问题,最后检查文件系统完整性。

核心命令:

  1. 空间与Inode检查:

```bash

df -h # 查看各分区空间使用率

df -i # 查看Inode使用率(小文件过多会导致Inode耗尽但空间有余)

```

  1. 定位大文件与隐藏目录:

```bash

du -h --max-depth=1 / | sort -hr # 逐层定位占空间最大的目录

lsof | grep deleted # 找出已被删除但仍被进程占用未释放空间的文件

```

  1. 挂载与文件系统检查:

```bash

mount | column -t # 检查挂载点状态,排查新数据写入被旧挂载点覆盖的“掩藏”问题

lsblk # 查看块设备映射关系

# 注意:fsck必须在卸载状态下执行

fsck -y /dev/sdX # 修复损坏的文件系统

```


总结:故障排查的“心法”

实战中,命令只是武器,真正的核心在于排查逻辑。面对突发故障,请牢记三步心法:

  1. 先止血,后治病:优先通过重启、限流、切流等手段恢复业务,再保留现场进行深度分析。
  2. 变更优先排查:超过60%的故障由近期变更引发,排查时务必先问:“最近有什么改动?”
  3. 善用二分法与对比法:在复杂链路中,通过掐断一半链路定位问题节点;通过与正常节点的配置对比,快速找出异常点。

将排查思路内化为本能,将命令烂熟于指尖,你就能在故障风暴中闲庭信步,成为系统最坚实的守夜人。