Linux网络与VPS日常运维故障全景排查手册
在管理和使用 VPS 的过程中,很多人遇到报错或者卡顿往往“病急乱投医”,网上随便搜两行一键脚本就往终端里粘贴。这不仅很难根治问题,还经常导致系统环境损坏甚至彻底断网。
本文作为本站所有排错专题的**“基石诊断手册”,按网络连通性、系统负载与进程、存储与端口**三大模块,整理了 Linux 运维中最常遇见的硬坑,并附上源码级机理与实战诊断路径。建议收藏备用。
快速导航字典
| 故障现象 | 常见根因 | 快速诊断命令 | 本站专题深入指南 |
|---|---|---|---|
| 开启 BBR 后测速无提升 | 丢包率过高、底层 qdisc 缓冲区拥堵、NAT 限制 | tc -s qdisc ls |
BBR无效果深度排查 |
kill -9 杀不死进程 |
进程处于 D 状态(等待磁盘/网络IO)或僵尸进程 | ps aux | awk '$8 ~ /[DZ]/' |
杀不死进程的底层原因 |
| 高并发短连接端口耗尽 | 大量套接字停留在 TIME_WAIT 占用本地端口 |
ss -s | grep time_wait |
TIME_WAIT端口耗尽解决 |
| SSH 一断开任务就被杀死 | SIGHUP 信号传递杀死子进程 | nohup / tmux / systemd |
SSH断开进程保留方案 |
| IPv6 网络缓慢或打开网页卡死 | PMTU 黑洞、Happy Eyeballs 双栈策略延迟 | ping6 -s 1420 -M do |
IPv6黑洞与双栈调优 |
| 小内存机器经常死机 | 未配置 Swap 导致触发内核 OOM-Killer 强杀 | dmesg | grep -i oom |
VPS增加Swap实操 |
| VPS 总是莫名变慢卡顿 | 宿主机超售导致 CPU Steal Time 飙升 | top -b -n 1 | grep Cpu |
CPU Steal Time解读 |
一、 网络与连接类故障排查
1. 为什么你的 BBR 测速“没有效果”?
很多人以为换了内核、启用了 BBR 就会脱胎换骨。但 BBR 算法的核心是基于瓶颈带宽(BtlBw)和最小往返时间(RTprop)的模型:
- 诊断:如果跨国公网丢包严重,原生 BBR 会频繁进入 PROBE_RTT 阶段拉低吞吐。如果想要对比激进型算法与原版的差异,可以参考 《Linux拥塞控制与内核源码级横评:BBR、BBRplus与第三方内核实测》;
- 解决思路:必须配合正确的流控队列规则(参见 《Linux流控队列深度对比:fq、fq_codel与CAKE》),或者在严重弱网环境下选用 BBRplus / 第三方内核。针对常见的配置失效场景,我们整理了完整的 《BBR 开启后没有速度提升?排查这 5 个关键原因》 可按步骤逐一验证。
2. IPv6 PMTU 黑洞:小包通,大包断
- 现象:能
ping6通目标地址,但curl拉取大文件或打开网页时直接超时卡死。 - 根因:中间某跳路由器禁用了 ICMPv6 “Packet Too Big” 差错报文,发送端无法感知正确的路径 MTU,导致大切片包被静默丢弃。
- 快速诊断:如果确实遇到大切片丢包,可以通过调整 MSS Clamping 解决,完整原理参见专题 《IPv6 PMTU 黑洞的根因与内核 MSS Clamping 修复》。
1
2# 探测是否是 1400 以上大包丢包
ping6 -c 3 -s 1420 -M do 2001:4860:4860::8888
二、 系统负载与进程异常排查
1. 进程处于不可中断睡眠(D 状态)
用 kill -9 <PID> 连 root 都杀不掉:
1 | # 查看所有处于 D (不可中断) 或 Z (僵尸) 状态的进程 |
- 核心机理:D 状态是内核为了保证文件系统或驱动一致性而设计的深度等待。强行杀可能会损坏数据,排查重点应放在卡死的 NFS 挂载、死锁的 I/O 设备或故障驱动。我们在 《Linux 下 kill -9 杀不死进程的终极原因剖析》 中对内核 Task 状态转移进行了详细剖析。
2. 怎么看出 VPS 是不是被母鸡超售坑了?
运行 top 命令,注意 %Cpu(s) 那一行的 %st(Steal Time):
1 | top -b -n 1 | grep "Cpu(s)" |
- 解读:如果
%st长期大于 5%~10%,说明物理机上的其他“邻居 VPS”正在疯狂抢占 CPU 算力,宿主机超售严重。我们在 《VPS CPU Steal Time 是什么?超售鉴别与性能损耗实测》 中提供了鉴别不同虚拟化架构(KVM vs OpenVZ)超售的具体方法。
三、 内存与端口资源枯竭排查
1. TIME_WAIT 过多吃满可用端口
- 现象:程序报
Cannot assign requested address(无法分配请求地址)。在 《Linux TIME_WAIT 端口耗尽故障排查实战》 中我们详细推导过 TCP 四次挥手的状态机耗时。 - 优化内核参数:
1
2
3
4
5
6
7
8
9sudo tee -a /etc/sysctl.d/99-network-ports.conf << 'EOF'
# 允许将 TIME_WAIT 套接字重新用于新的 TCP 连接
net.ipv4.tcp_tw_reuse = 1
# 扩大本地端口分配范围
net.ipv4.ip_local_port_range = 10240 65535
# 减小 FIN 超时时间
net.ipv4.tcp_fin_timeout = 30
EOF
sudo sysctl --system
结语:建立你的系统化排查思维
遇到 Linux / VPS 问题时,最忌讳的是“凭感觉改配置”。记住标准三步走:
- 看日志与状态:
journalctl -xe、dmesg -T、ss -s; - 定位瓶颈层级:区分是公网路由延迟、内核队列排队、CPU Steal 限制、还是文件 I/O 阻塞;
- 查阅专题对症下药:按本手册索引在对应上下文中深入查阅针对性技术方案。