🔴 VMware 虚拟网卡(VMXNET3)导致的 TCP 长连接异常
环境:Ubuntu + Jenkins + gitlab
表现:
ping 正常
SSH 偶发断开
XShell 10053
Jenkins 页面显示异常/不完整
本质:
markdown
VMXNET3 的 TSO/GSO/GRO
↓
Ubuntu 内核 TCP 分段/聚合异常
↓
长连接被 reset
↓
SSH / Jenkins websocket 断开
修复步骤(简化版)
1. 关闭 VMXNET3 offload(最关键)
执行:
vbnet
ethtool -K ens160 tso off gso off gro off
验证:
ethtool -k ens160
确认:
text
tcp-segmentation-offload: off
generic-segmentation-offload: off
generic-receive-offload: off
2. SSH 配置优化
编辑:
bash
vim /etc/ssh/sshd_config
追加:
yaml
UseDNS no
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3
GSSAPIAuthentication no
重启:
systemctl restart ssh
3. 关闭 GUI(服务器建议)
arduino
systemctl stop lightdm
如果不需要桌面:
bash
systemctl disable lightdm
4. 永久关闭 offload(防止重启失效)
创建:
bash
vim /etc/systemd/system/disable-offload.service
内容:
ini
[Unit]
Description=Disable VMXNET3 offload
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -K ens160 tso off gso off gro off
[Install]
WantedBy=multi-user.target
执行:
bash
systemctl daemon-reload
systemctl enable disable-offload
systemctl start disable-offload
5. (可选,终极稳定方案)
VMware 虚拟机:
VMXNET3 → E1000E
路径:
python
VM Settings
→ Network Adapter
→ Adapter Type
→ E1000E
最终效果
一般会解决:
| 问题 | 结果 |
|---|---|
| XShell 10053 | ✅ |
| SSH 偶发断开 | ✅ |
| Jenkins 页面不完整 | ✅ |
| websocket reset | ✅ |
| 长连接 timeout | ✅ |
这个问题的最终定性
不是:
❌ Jenkins_HOME ❌ auditd ❌ sshd崩溃 ❌ Linux资源不足
而是: