VPS 带宽跑满时,SSH 连接超时是因为网络队列拥堵导致数据包丢失。最推荐的处理方向是先用控制台(VNC)登录,定位占用带宽的进程并限制其速率,或者通过流量控制优先保障 SSH 端口通信。
先说结论:带宽饱和导致 SSH 超时属于网络拥塞问题,必须通过控制台介入限制非关键流量或调整优先级。
- 先确认:使用 VNC 控制台登录,排除 SSH 依赖。
- 先处理:定位高带宽进程并使用 tc 或限制软件速率。
- 再验证:测试 SSH 连接延迟及带宽占用情况。
命令速用版
以下命令用于查看带宽占用和限制流量,需在 root 权限下执行。
# 查看实时带宽占用及对应进程
nethogs
# 查看网卡流量排名
iftop -P -n
# 限制 eth0 出口带宽为 10mbit (示例)
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
# 删除流量控制规则
tc qdisc del dev eth0 root
为什么会这样
带宽跑满导致 SSH 超时的根本原因是网络接口队列满载,SSH 数据包被丢弃或延迟。
VPS 的带宽通常是独占共享或限量共享资源,当某个进程占满上行或下行带宽时,TCP 协议会触发拥塞控制机制,导致后续数据包排队或丢失。SSH 协议对延迟敏感,少量丢包即可引起连接中断或响应超时。此时操作系统网络栈无法区分关键管理流量和普通业务流量,除非配置流量控制策略。
分步处理
处理带宽跑满问题需按顺序操作,避免误操作导致服务器彻底不可达。
第一步:通过控制台登录
在云服务商后台找到 VNC 或 Web Console 入口登录。此方式不依赖 SSH 网络通道,确保在带宽满时仍能操作。
第二步:定位占用进程
执行 nethogs 或 iftop 命令。观察哪个进程或 IP 占用了大部分带宽。如果是异常流量,记录进程 PID。
第三步:限制或停止进程
若是业务进程,使用 trickle 或 cpulimit 限制其网络速率。若是异常进程,使用 kill -9 PID 终止。若需保留业务但保障 SSH,使用 tc 命令优先保障 22 端口。
第四步:配置流量优先级(可选)
使用 tc 设置 HTB 队列,将 SSH 流量设为最高优先级。注意 tc 规则重启后失效,需写入启动脚本。
怎么验证是否生效
验证需结合网络连通性测试和带宽监控数据。
检查命令:
执行 tc -s qdisc 查看流量控制统计,确认是否有丢包或规则生效。执行 ping -c 4 你的 VPS IP 观察延迟是否稳定。
状态判断:
尝试新建 SSH 会话,若连接时间小于 3 秒且无卡顿,说明恢复。观察 iftop 确认总带宽未再次跑满。
常见坑
操作过程中容易遇到配置失效或误封管理端口的问题。
- TC 规则重启丢失:Linux 重启后
tc规则清空,需放入/etc/rc.local或 systemd 服务。 - 误限 SSH 端口:配置流量控制时不要限制 22 端口速率,否则 SSH 依然会卡。
- 控制台不可用:部分低价 VPS 可能不提供 VNC,此时只能等待带宽释放或联系服务商重置网络。
常见问题
无法 SSH 连接时如何登录服务器?
必须使用云服务商提供的 VNC 或 Web Console 控制台登录,该方式走独立管理通道,不受业务带宽影响。
限制带宽后服务器变慢怎么办?
检查是否限制了关键业务端口,或 CPU/内存资源是否也同时耗尽,需综合排查系统负载。
tc 命令配置错误导致网络全断怎么恢复?
通过 VNC 控制台执行 tc qdisc del dev 网卡名 root 清除所有规则,网络会立即恢复默认状态。