《动手测试单机百万连接》实验记录(三)
解决了问题一,现在继续看问题二,结果不能复现问题二,猜测是因为升级内核到5.19.0的缘故。由于不想把内核再折腾回5.15.0因此作罢。
继续尝试在aws的两台ec2上做这个实验,实验环境如下:
- 机器 A:2 核 4G 的虚拟机,c6i.large,内核 5.10.157,Amazon Linux 2
- 机器 B:2 核 4G 的物理机,c6i.large,内核 5.10.157,Amazon Linux 2
- 机器 B 启 20 个 tcp server,监听端口范围是 8100~8119
- 机器 A 启 20 个客户端进程,各自选择一个端口向机器 B 发起 5 万连接
- 最终目标:机器 A 最终向机器 B 建立 100 万个 tcp 连接
所有参数配置好后,每次只能建立102610个连接(其中有一个是ssh连接)
开始检查网络状态:
[ec2-user@ip-172-31-33-5 ~]$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.33.5 netmask 255.255.240.0 broadcast 172.31.47.255
inet6 fe80::8bd:e4ff:febb:5c5e prefixlen 64 scopeid 0x20<link>
ether 0a:bd:e4:bb:5c:5e txqueuelen 1000 (Ethernet)
RX packets 106481 bytes 6485891 (6.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 212038 bytes 15075989 (14.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@ip-172-31-35-181 ~]# netstat -s
Ip:
278300 total packets received
2 with invalid addresses
0 forwarded
0 incoming packets discarded
278298 incoming packets delivered
138012 requests sent out
12 outgoing packets dropped
1 dropped because of missing route
Tcp:
116 active connections openings
104614 passive connection openings
9 failed connection attempts
20 connection resets received
104572 connections established
277752 segments received
137453 segments send out
26 segments retransmited
0 bad segments received.
121 resets sent
[ec2-user@ip-172-31-33-5 ~]$ ethtool -S eth0
NIC statistics:
tx_timeout: 0
suspend: 0
resume: 0
wd_expired: 0
interface_up: 1
interface_down: 0
admin_q_pause: 0
reset_fail: 0
bw_in_allowance_exceeded: 0
bw_out_allowance_exceeded: 0
pps_allowance_exceeded: 0
conntrack_allowance_exceeded: 1277
linklocal_allowance_exceeded: 0
最后一个查看命令中,发现一个异常指标conntrack_allowance_exceeded,随后查aws文档找到关于这个指标的解释
里面还提到还可以看conntrack_allowance_available,但是需要基于Nitro系统构建的实例,c6i.large在名单里面,还要装特定的ena驱动2.8.1,于是又去安装ena驱动(我安装的2.8.6):
sudo yum install kernel-devel-$(uname -r) git
cd kernel/linux/ena && make
sudo rmmod ena && sudo insmod ena.ko
// 查看驱动是否安装好
ethtool -i eth0 | grep version
安装好后再次查看信息:
[ec2-user@ip-172-31-33-5 ~]$ ethtool -S eth0 | grep conn
conntrack_allowance_exceeded: 2014
conntrack_allowance_available: 0
// 停止实验再查看一次
[ec2-user@ip-172-31-33-5 ~]$ ethtool -S eth0 | grep conn
conntrack_allowance_exceeded: 2047
conntrack_allowance_available: 102609
由此可以断定是ec2的硬件限制了最大连接数了。
本作品采用《CC 协议》,转载必须注明作者和本文链接