《动手测试单机百万连接》实验记录(三)

解决了问题一,现在继续看问题二,结果不能复现问题二,猜测是因为升级内核到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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!