1. Linux网络故障排查全景指南
作为运维工程师最常遇到的"玄学问题",网络故障排查往往让人抓狂。服务器突然失联、应用间歇性超时、SSH连接时断时续——这些问题背后可能藏着从物理层到应用层的各种"妖魔鬼怪"。本文将用我十年运维踩坑经验,带你建立系统化的排查思维,掌握那些真正实用的"屠龙技"。
2. 排查工具武装到牙齿
2.1 基础诊断三件套
bash复制# 连通性测试(ICMP层)
ping -c 4 8.8.8.8
# DNS解析检查(应用层)
dig +short example.com
nslookup example.com
# 路由追踪(网络层)
traceroute -n 8.8.8.8
mtr --report 8.8.8.8
注意:生产环境通常禁用ICMP,此时可用telnet替代ping测试端口连通性
2.2 网络状态分析利器
bash复制# 连接状态统计
ss -tulnp # 比netstat更高效
ss -s # 汇总统计
# 实时流量监控
iftop -nNP # 可视化流量排行
nethogs # 进程级流量监控
# 高级抓包分析
tcpdump -i eth0 -w capture.pcap port 80
tshark -r capture.pcap -Y "http.request" # Wireshark命令行版
3. 分层排查实战手册
3.1 物理层问题排查
- 网卡状态检查:
bash复制ethtool eth0 | grep -E 'Speed|Duplex|Link' ip -s link show eth0 # 查看错包计数 - 典型故障案例:
- 网线松动导致
RX errors激增 - 双工模式不匹配引发
collisions
- 网线松动导致
3.2 网络层经典问题
- 路由表异常:
bash复制ip route show table all route -n # 传统命令 - 策略路由陷阱:
bash复制
ip rule list ip route show table 100
3.3 传输层疑难杂症
- 连接跟踪溢出:
bash复制cat /proc/sys/net/netfilter/nf_conntrack_max dmesg | grep nf_conntrack - TIME_WAIT堆积:
bash复制ss -s | grep TIMEWAIT sysctl net.ipv4.tcp_tw_reuse # 建议开启
4. 生产环境救火实录
4.1 案例一:K8s节点间歇性失联
- 现象:Node NotReady与API Server连接超时交替出现
- 排查路径:
- 通过
calicoctl node status检查BGP对等体 - 发现
bird进程内存泄漏 - 最终方案:升级Calico版本+限制bird内存
- 通过
4.2 案例二:Nginx负载均衡异常
- 现象:部分请求返回502但后端服务正常
- 关键命令:
bash复制grep 'no live upstreams' /var/log/nginx/error.log tcpdump -i any 'port 80 and host backend_ip' -w nginx.pcap - 根因:Keepalive超时设置不一致
5. 性能调优黄金参数
5.1 TCP协议栈优化
bash复制# 增大连接跟踪表
sysctl -w net.netfilter.nf_conntrack_max=1000000
# 加快TIME_WAIT回收
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=30
# 缓冲区优化
sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456'
sysctl -w net.ipv4.tcp_wmem='4096 16384 4194304'
5.2 网卡高级配置
bash复制# 启用多队列
ethtool -L eth0 combined 8
# 调整Ring Buffer
ethtool -G eth0 rx 4096 tx 4096
# 开启GRO/GSO
ethtool -K eth0 gro on gso on
6. 排查工具箱增强版
6.1 网络质量测试
bash复制# 带宽测试
iperf3 -c 10.0.0.1 -t 30 -P 4
# 延迟抖动检测
ping -i 0.1 -s 1000 10.0.0.1 | awk '{print $7}' | cut -d= -f2
6.2 可视化分析方案
- 实时流量图:
vnstat -l -i eth0 - 历史流量报告:
vnstat -d - Web版分析工具:
ntopng
经验:长期运行
nethogs可能导致内存泄漏,建议用iftop替代长期监控
7. 排查思维导图
-
现象定位
- 是否所有服务受影响?
- 是否特定时间段出现?
- 是否有规律性?
-
缩小范围
- 客户端本地测试
- 同机房其他机器测试
- 跨机房测试
-
分层验证
mermaid复制graph TD A[应用层] -->|curl测试| B[传输层] B -->|telnet测试| C[网络层] C -->|ping测试| D[物理层] -
对比分析
- 故障机器与正常机器配置差异
- 系统日志时间点关联分析
- 网络设备日志联动检查
8. 避坑指南
8.1 DNS缓存陷阱
bash复制# 清空nscd缓存
nscd -i hosts
# 检查systemd-resolved缓存
resolvectl statistics
8.2 连接跟踪风暴
- 症状:
dmesg出现nf_conntrack: table full - 应急方案:
bash复制
sysctl -w net.netfilter.nf_conntrack_max=2000000 sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=600
8.3 虚拟网络特殊问题
- KVM桥接模式MTU不一致
- Docker容器
conntrack冲突 - Open vSwitch流表溢出
9. 日志分析高阶技巧
9.1 时间戳关联分析
bash复制# 跨主机日志对齐(需提前配置NTP)
journalctl --since "2023-05-01 14:00" --until "2023-05-01 14:05" -u kubelet
grep "May 1 14:0[0-5]" /var/log/syslog
9.2 网络设备日志关联
- 交换机端口错误计数:
code复制show interface ethernet 1/1/1 counters errors - BGP邻居状态变化:
code复制show log | include BGP-5-ADJCHANGE
10. 终极排查框架
-
现象记录
- 故障时间线
- 影响范围图谱
- 业务指标对比
-
环境检查
bash复制# 系统基本信息 uname -a cat /etc/*release # 内核参数 sysctl -a | grep net.ipv4 # 安全策略 iptables -L -n -v -
流量复制分析
bash复制# 端口镜像 tcpreplay -i eth0 -K capture.pcap # 流量标记 iptables -A INPUT -j LOG --log-prefix "[NETDEBUG] " -
最小化验证
- 构造测试容器环境
- 使用
nc模拟服务 - 逐步添加业务组件
重要:复杂网络问题建议使用
tmux同步多窗口监控:code复制tmux new-session -s debug 'iftop -i eth0' \; split-window -v 'dmesg -w' \; split-window -h 'ss -tulnp'