hyper-v 70万nat会话数流量分析 结合你前面提供的所有数据(Hyper-V、sar、conntrack、iptables NAT),已经基本可以定位问题方向了。 一、当前流量路径 你的架构大概是: 互联网 │ ▼ rulr-4 / rulr-5(NAT代理) │ ├── rulr2-01 ├── rulr2-02 └── rulr2-03 外部约 60 万 NAT 会话: rulr-4 ≈ 36万 rulr-5 ≈ 34万 合计: ≈ 70万连接 与描述的60万级连接基本一致。 二、最重要的发现 从 sar -n SOCK 看: rulr-4 367779 365949 367271 369945 约: 36~37万 Socket rulr-5 338756 341389 344627 344251 约: 33~34万 Socket 但是后端: rulr2-01 803 810 只有: 800个连接 rulr2-02 118000 122000 约: 12万连接 rulr2-03 117000 123000 约: 12万连接 说明: rulr2-02 rulr2-03 承担主要业务连接 rulr2-01 几乎没接到流量 负载均衡根本没均匀。 三、iptables输出暴露的问题 你贴出的 NAT 表: 75M 3632M DNAT tcp dpt:6031 这一条特别异常: 75M packets 3632M bytes 而其它规则: 6100 6101 6102 ... 只有几千包。 说明: 6031端口承担了绝大部分业务。 例如: 6031 ↓ 172.18.0.200 ↓ 容器 ↓ rulr2-02/rulr2-03 因此真正热点在: 6031 不是整个代理。 四、网络是否到瓶颈 根据你之前的 sar: eth0 rxkB/s ≈ 200 txkB/s ≈ 180 即: 200 KB/s 换算: ≈ 1.6 Mbps 即便考虑采样误差: < 10 Mbps 而宿主机是: Intel 82599 10G 所以: 10Gbps ↓ 实际只有几Mbps 差了上千倍。 结论: ❌ 不是带宽瓶颈 五、Hyper-V数据也证明不是网卡瓶颈 你抓到: Packets Received/sec 3066 仅: 3000 PPS 10G网卡正常能承受: 100万 PPS以上 当前: 3000 PPS 连 1% 都不到。 六、CPU中断情况 你抓到: % DPC Time Total: 0.52% 说明: 网卡中断压力极低 如果真是网卡瓶颈: DPC 20% 30% 40% 都常见。 你这里只有: 0.5% 非常健康。 七、真正可疑的地方 从目前证据看: 网络没满 网卡没满 CPU没满 conntrack没满 端口没满 最可疑的是: NAT状态表查找开销 你目前: rulr-4 ≈37万连接 rulr-5 ≈34万连接 虽然: nf_conntrack_max=1048576 没到上限。 但是: 30~40万活跃连接 已经足以让: conntrack hash NAT lookup 消耗明显 CPU。 建议查看: conntrack -S 重点看: insert_failed drop early_drop search_restart 八、进一步验证 在晚高峰(20:00~22:00)执行: sar -n TCP,ETCP 60 看: active/s passive/s retrans/s 特别关注: retrans/s 如果: >100 >1000 说明开始拥塞。 再看: sar -n DEV 60 重点: %ifutil 如果: <10% 则绝对不是带宽问题。 九、我目前的判断 综合所有证据: 项目 状态 10G物理网卡 正常 Hyper-V交换机 正常 宿主机CPU 正常 DPC中断 正常 虚拟机带宽 正常 nf_conntrack_max 充足 ip_local_port_range 充足 NAT连接数 偏高 后端负载均衡 明显不均衡 最大的异常反而是: rulr2-01 ≈ 800连接 rulr2-02 ≈ 12万连接 rulr2-03 ≈ 12万连接 这说明后端负载均衡没有真正做到 1:1:1 分流。 下一步我建议直接查看 rulr-4/rulr-5 上负责分流到 rulr2-01、02、03 的具体 iptables(或 haproxy/nginx)配置,包括: iptables-save 或者: iptables -t nat -S 中涉及 rulr2-01、rulr2-02、rulr2-03 的 DNAT 规则。 把这部分贴出来,我可以直接帮你计算实际流量命中比例,并判断为什么 rulr2-01 几乎没有接到会话。