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)的模型:

2. IPv6 PMTU 黑洞:小包通,大包断

  • 现象:能 ping6 通目标地址,但 curl 拉取大文件或打开网页时直接超时卡死。
  • 根因:中间某跳路由器禁用了 ICMPv6 “Packet Too Big” 差错报文,发送端无法感知正确的路径 MTU,导致大切片包被静默丢弃。
  • 快速诊断:
    1
    2
    # 探测是否是 1400 以上大包丢包
    ping6 -c 3 -s 1420 -M do 2001:4860:4860::8888
    如果确实遇到大切片丢包,可以通过调整 MSS Clamping 解决,完整原理参见专题 《IPv6 PMTU 黑洞的根因与内核 MSS Clamping 修复》。

二、 系统负载与进程异常排查

1. 进程处于不可中断睡眠(D 状态)

用 kill -9 <PID> 连 root 都杀不掉:

1
2
# 查看所有处于 D (不可中断) 或 Z (僵尸) 状态的进程
ps -eo pid,user,stat,wchan:30,comm | grep -E "^[0-9]+.*[DZ]"
  • 核心机理:D 状态是内核为了保证文件系统或驱动一致性而设计的深度等待。强行杀可能会损坏数据,排查重点应放在卡死的 NFS 挂载、死锁的 I/O 设备或故障驱动。我们在 《Linux 下 kill -9 杀不死进程的终极原因剖析》 中对内核 Task 状态转移进行了详细剖析。

2. 怎么看出 VPS 是不是被母鸡超售坑了?

运行 top 命令,注意 %Cpu(s) 那一行的 %st(Steal Time):

1
2
top -b -n 1 | grep "Cpu(s)"
# 示例输出:%Cpu(s): 1.5 us, 0.8 sy, 0.0 ni, 85.0 id, 0.2 wa, 0.0 hi, 0.0 si, 12.5 st

三、 内存与端口资源枯竭排查

1. TIME_WAIT 过多吃满可用端口

  • 现象:程序报 Cannot assign requested address(无法分配请求地址)。在 《Linux TIME_WAIT 端口耗尽故障排查实战》 中我们详细推导过 TCP 四次挥手的状态机耗时。
  • 优化内核参数:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo 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 问题时,最忌讳的是“凭感觉改配置”。记住标准三步走:

  1. 看日志与状态:journalctl -xe、dmesg -T、ss -s;
  2. 定位瓶颈层级:区分是公网路由延迟、内核队列排队、CPU Steal 限制、还是文件 I/O 阻塞;
  3. 查阅专题对症下药:按本手册索引在对应上下文中深入查阅针对性技术方案。