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 几乎没有接到会话。


Revision #1
Created 3 June 2026 11:57:45 by Admin
Updated 3 June 2026 11:58:46 by Admin