1. Linux故障排查的核心思路与基本原则
作为一名在Linux系统运维领域摸爬滚打十年的老手,我处理过上千次系统故障。与Windows不同,Linux故障往往不会弹出友好提示框,而是通过日志、返回码和异常行为默默抗议。掌握系统化的排查方法,比记住具体命令更重要。
排查Linux故障时,我始终坚持三个黄金原则:
- 先看现象再动手:记录完整的错误表现(包括时间戳、触发条件、报错信息)
- 从简单到复杂:先检查网络连接、磁盘空间等基础项,再深入内核参数
- 保持现场完整性:在不确定的情况下,先用
screen或tmux创建隔离环境
重要提示:永远不要在root用户下直接执行来源不明的修复命令,这相当于把系统管理员权限交给未知脚本。
2. 高频故障场景与速查指南
2.系统启动故障排查
当系统无法启动时,我通常会按照以下顺序排查:
BIOS/UEFI阶段:
- 检查硬件自检是否通过(听蜂鸣声/看指示灯)
- 确认启动设备顺序(是否误设USB优先)
GRUB引导阶段:
- 按
e编辑启动项,临时去掉splash quiet参数查看详细日志 - 尝试
init=/bin/bash进入应急shell
- 按
内核加载阶段:
- 观察卡在哪个驱动加载环节(常见于显卡、RAID驱动)
- 使用
dmesg | grep -i error过滤关键错误
初始化系统阶段:
- systemd系统查看
journalctl -xb - SysVinit系统检查
/var/log/boot.log
- systemd系统查看
2.2 性能问题诊断流程
上周刚处理过一个生产环境CPU跑满的案例,我的标准排查动线是:
快速定位异常进程:
top -c -o %CPU pidstat 1 5分析线程级资源占用:
ps -eLf | grep <PID> perf top -p <PID>检查系统负载均衡:
mpstat -P ALL 1 lscpu深入进程行为分析:
strace -ff -p <PID> ltrace -p <PID>
3. 日志分析的进阶技巧
3.1 必须掌握的日志工具链
基础查看:
less /var/log/syslog # Debian系 less /var/log/messages # RHEL系实时监控:
tail -f /var/log/nginx/error.log | grep -v 'favicon.ico'高级过滤:
journalctl --since "2023-07-01" --until "2023-07-02" _UID=1000
3.2 日志关联分析实战
去年处理过一个分布式系统的诡异故障,最终通过日志关联找到根源:
提取时间窗口:
sed -n '/Jul 15 14:00/,/Jul 15 14:30/p' /var/log/cluster.log > timewindow.log多日志源关联:
paste <(cat nginx.log) <(cat app.log) | awk '/502/{print $1,$NF}'异常模式识别:
awk '{print $1}' auth.log | sort | uniq -c | sort -nr | head
4. 网络故障的深度排查
4.1 分层诊断法
我习惯按照OSI模型自底向上排查:
物理层:
ethtool eth0 mii-tool eth0网络层:
ip -s link show dev eth0 tc -s qdisc show dev eth0传输层:
ss -tulnp conntrack -L应用层:
curl -v http://localhost:8080/api tcpdump -i any -w capture.pcap
4.2 典型网络问题案例
最近遇到的三个经典网络故障:
MTU不匹配导致大包丢失:
ping -M do -s 1472 192.168.1.1ARP缓存污染:
arp -vn | grep incomplete ip neigh flush dev eth0连接跟踪表溢出:
sysctl net.netfilter.nf_conntrack_max dmesg | grep nf_conntrack
5. 存储问题排查大全
5.1 磁盘I/O性能分析
我的标准诊断工具包:
# 实时IO监控 iotop -oP iostat -x 1 # 深度分析 blktrace -d /dev/sda -o trace btt -i trace.blktrace5.2 文件系统故障处理
遇到文件系统错误时,我的应急流程:
强制卸载:
umount -l /mnt进入单用户模式:
systemctl rescue修复检查:
fsck -y /dev/sdb1 xfs_repair /dev/sdc1坏块检测:
badblocks -v /dev/sdd smartctl -t long /dev/sde
6. 内核级问题诊断
6.1 内核日志分析
关键命令组合:
dmesg -T --level=err,warn journalctl -k --since "1 hour ago" cat /proc/kmsg | grep -i oops6.2 内核参数调优
经常需要调整的参数示例:
# 防止进程OOM被杀 sysctl vm.overcommit_memory=2 # 提升文件描述符限制 sysctl fs.file-max=2097152 # 缓解SYN洪水攻击 sysctl net.ipv4.tcp_syncookies=17. 安全相关故障排查
7.1 权限问题诊断
常见症状排查:
# 检查文件权限 namei -l /path/to/file # 查看SELinux上下文 ls -Z /var/www/html # 审计日志分析 ausearch -m avc -ts recent7.2 入侵检测流程
我的应急响应checklist:
检查异常进程:
ps auxf | grep -E '(\./|tmp|var/tmp)'分析网络连接:
lsof -i -n -P netstat -tulnpe验证文件完整性:
rpm -Va debsums -c
8. 自动化排查工具集
8.1 我的常用诊断脚本
系统健康检查脚本片段:
#!/bin/bash echo "===== Memory =====" free -h echo -e "\n===== Disk =====" df -hT -x tmpfs -x devtmpfs echo -e "\n===== Load =====" uptime8.2 开源诊断工具推荐
经过实战检验的工具:
- perf:系统级性能分析
- sysdig:全系统监控
- bpftrace:动态追踪
- nmon:资源监控
- mtr:网络诊断
9. 疑难杂症处理经验
9.1 玄学问题解决思路
遇到无法解释的现象时,我的三板斧:
- 环境隔离:用Docker重现问题
- 最小化复现:剥离所有非必要组件
- 二分回滚:通过版本控制逐步定位
9.2 硬件相关故障特征
这些现象往往指向硬件问题:
- 随机性的段错误(segfault)
- ECC内存报错
- 磁盘SMART预警
- 网卡CRC错误计数增长
10. 建立个人知识库
10.1 我的故障记录模板
## 问题描述 [现象、时间、影响范围] ## 排查过程 1. 第一线索 2. 验证步骤 3. 转折点 ## 根本原因 [技术层面的根本原因] ## 解决方案 [具体可操作的修复步骤] ## 经验总结 [下次如何更快发现/预防]10.2 推荐的知识管理工具
- Obsidian:本地知识图谱
- Joplin:跨平台笔记
- Cheat.sh:命令行速查
- tldr:简化版man手册
经过多年实践,我发现最有效的学习方式是把每个解决的故障都记录下来。当类似问题再次出现时,这个私人知识库能节省大量时间。最近我正在用Ansible把常见修复方案自动化,这样下次遇到已知问题,一个playbook就能搞定。