连接并发量测试


连接并发量测试

​ 实际连接数会受到系统参数,网络环境等因素影响。测试ubuntu 20.04 系统下的8.6G内存

socket()基础知识可见网络编程一栏

突发奇想,想要测试一下客户端以及服务器在我的虚拟机上,它的最大承受压力能达到多少。

服务器系统参数:ubuntu 20.04 8.6G内存

测试客户端最大连接数量

一、简单TCP连接数量

服务器端:socket()->bind()->listen()->accept()->recv()->close()

tcp连接数

共连接了1020个客户端且5s约900多个连接,速度较慢

二、epoll的I/O多路复用的连接数量

服务器使用epoll同样最大连接1020个客户端,<1s到最大连接,速度极快。

故epoll能明显增加客户端连接的效率,但不会增加最大连接数。

三、通过修改文件句柄数增加连接数量

因为一个socket()连接会占用一个文件描述符(fd),而文件描述符资源有限,可通过命令查看该系统默认文件句柄数,并通过调整文件句柄数来控制socket连接的数量。

将系统默认1024个文件句柄数修改成65535个

1.查看文件句柄数

ulimit -n —显示 1024

2.修改文件句柄数:

sudo vi /etc/security/limits.conf 添加 :
* soft nofile 65535
* hard nofile 65535
sudo vi /etc/systemed/user.conf 将 #DefaultlimitNOFILE 改成 DefaultlimitNOFILE=65535
sudo vi /etc/systemed/system.conf 将 #DefaultlimitNOFILE 改成 DefaultlimitNOFILE=65535
重启系统即修改完成。

调整文件句柄大小

可看出共连接了28231个客户端

理论上我们将文件句柄数提高至65535,却只有28231个连接,说明有其他的参数进一步限制了连接数。

四、通过修改端口号增加连接数

1.查看linux端口范围
sysctl net.ipv4.ip_local_port_range

显示结果

net.ipv4.ip_local_port_range = 32768 60999

可知 60999 - 32768 = 28231 刚好符合上述测试

2.修改linux端口范围:

1.以下是端口分配类别:
0 – 1023: 常用端口和系统端口
1024 – 49151: 软件的注册端口
49152 – 65535: 动态端口或私有端口

暂时性修改临时端口的范围:

 sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"

永久性修改

修改文件 /etc/sysctl.conf 键入如下语句:

net.ipv4.ip_local_port_range = 1024 65535

修改文件数,端口号后数量

可看出共连接了62973个客户端

故通过修改文件句柄数和端口号范围可大幅度增加连接数,从原来的1020到62973。

若想进一步提升连接数,可从tcp内存方面考虑,增加 tcp_mem 页面大小 或对 tcp_wmem与 tcp_rmem 进行调整
也受限于机器的总内存**

综上所述:

ubuntu 20.04 8.6G内存 1个客户端能支持的最大连接数是接近6.3万

测试服务器端最大连接数量

受限于内存大小 8G

修改TCP_MEM参数

这样和tcp_mem最大页面值数量比较吻合,因此此值也需要修改。

三个TCP调整语句为:

  1. echo “net.ipv4.tcp_mem = 786432 2097152 3145728”>> /etc/sysctl.conf
  2. echo “net.ipv4.tcp_rmem = 4096 4096 16777216”>> /etc/sysctl.conf
  3. echo “net.ipv4.tcp_wmem = 4096 4096 16777216”>> /etc/sysctl.conf

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com

×

喜欢就点赞,疼爱就打赏