故障排查实战手册:运维高手的“望闻问切”
故障排查实战手册:运维高手的“望闻问切”
在IT运维的日常中,故障如同潜伏的暗雷,随时可能引爆。面对告警风暴和业务中断,新手往往容易慌乱,而老手则能按图索骥,抽丝剥茧。故障排查的核心不在于记忆多少命令,而在于建立一套科学的逻辑框架。本手册按常见故障场景分类,梳理排查思路与核心命令,助你快速定位并斩断故障根因。
场景一:网络连通性故障
排查思路:
网络故障遵循“自底向上”原则。先查物理链路,再查本机协议栈,接着查网关连通性,最后查目标端口与DNS解析。切忌一上来就Ping外网,容易忽略本机或网关层面的细节。
核心命令:
- 查本机网卡状态与IP
```bash
ip addr show # 确认网卡是否UP,IP是否正确
ethtool eth0 # 检查物理链路是否Link detected
```
- 查本机路由与网关
```bash
ip route show # 确认默认网关是否存在
```
- 逐跳探测连通性
```bash
ping <网关IP> # 先测网关,不通则本机或二层网络问题
ping <目标IP> # 测目标IP,区分是网络断还是端口断
mtr -nrb <目标IP> # 结合Ping与Traceroute,查哪一跳丢包或延迟高
```
- 查端口与DNS
```bash
telnet
nc -zv
nslookup <域名> # 排查DNS解析是否正确
```
场景二:系统负载与CPU飙高
排查思路:
负载高需先区分是CPU密集型还是I/O密集型。通过load average结合CPU使用率判断;若是CPU型,定位消耗CPU的进程;若是I/O型,转至磁盘排查。
核心命令:
- 看整体负载与CPU分布
```bash
uptime # 看1/5/15分钟负载,判断是突发还是持续
vmstat 1 5 # 关注r列(运行队列)、b列(阻塞队列)、wa列(I/O等待)
```
- 定位高耗CPU进程
```bash
top -H # 查看消耗CPU最高的线程(Shift+P按CPU排序)
pidstat -u 1 3 # 动态监控进程CPU占用变化
```
- 深度剖析进程(Java等应用常见)
```bash
top -Hp
printf "%x\n"
jstack
```
场景三:内存溢出与OOM
排查思路:
先看系统真实内存使用(排除Cache/Buffer干扰),再查是否触发了系统级OOM Killer,最后深入应用层分析内存分配。
核心命令:
- 查看真实内存余量
```bash
free -h # 关注available列,而非free列
```
- 查系统级OOM日志
```bash
dmesg -T | grep -i oom # 查看内核是否因内存不足杀死了进程
cat /var/log/messages | grep -i oom
```
- 定位内存消耗大户
```bash
top -o %MEM # 按内存使用率排序
pidstat -r 1 3 # 监控进程内存增量,找泄漏
```
- 进程内存映射分析
```bash
pmap -x
```
场景四:磁盘空间与I/O瓶颈
排查思路:
空间问题常伴随I/O问题。先排查空间是否满(含隐藏文件与已删除但未释放的文件),再看Inode是否耗尽,最后查I/O响应时间与队列。
核心命令:
- 查磁盘空间与Inode
```bash
df -h # 查看各分区空间使用率
df -i # 查看Inode使用率(小文件过多导致Inode耗尽)
du -sh /* # 逐层定位大文件目录
```
- 查已删除但未释放的“僵尸”文件
```bash
lsof | grep deleted # 文件被rm删除但进程仍持有,空间不释放。需重启对应进程
```
- 查I/O性能瓶颈
```bash
iostat -xd 1 5 # 关注%util(使用率)和await(响应时间),超过80ms通常异常
```
- 定位高I/O进程
```bash
iotop -oP # 只显示产生I/O的进程
pidstat -d 1 3 # 查看进程的读写字节数
```
场景五:服务启动失败或异常退出
排查思路:
服务挂掉不要盲目重启,先看退出状态码,再看系统日志与应用日志,最后检查配置文件语法与端口占用。
核心命令:
- 查服务状态与退出码
```bash
systemctl status <服务名> # 关注Active状态与Exit Code
journalctl -u <服务名> -n 50 --no-pager # 查看该服务最近的系统日志
```
- 查端口占用冲突
```bash
ss -tlnp | grep <端口> # 确认端口是否被其他进程抢占
```
- 查配置文件语法
```bash
nginx -t # 以Nginx为例,测试配置是否正确
httpd -t # 以Apache为例
```
- 追踪服务启动过程(终极武器)
```bash
strace -f <启动命令> # 追踪系统调用,看卡在哪个文件或网络请求上
```
排查心法总结
- 先静后动:故障发生时,先保留现场(如
top、dmesg快照),再进行操作,避免破坏现场。 - 变更优先:80%的故障由变更引起。排查时首先问一句:“最近有没有上线、改配置或扩容?”
- 由表及里:从网络到系统,从系统到应用;从大面到进程,从进程到线程。
- 善用日志:日志是真相的唯一来源。系统日志(
/var/log/messages)、应用日志、内核日志(dmesg)是排障的三板斧。
熟练掌握这套手册,不仅能缩短故障恢复时间(MTTR),更能将排障过程标准化,减少对个人经验的过度依赖。运维之路,道阻且长,愿此手册成为你斩断乱麻的利刃。