连接并发量测试
实际连接数会受到系统参数,网络环境等因素影响。测试ubuntu 20.04 系统下的8.6G内存
socket()基础知识可见网络编程一栏
突发奇想,想要测试一下客户端以及服务器在我的虚拟机上,它的最大承受压力能达到多少。
服务器系统参数:ubuntu 20.04 8.6G内存
测试客户端最大连接数量
一、简单TCP连接数量
服务器端:socket()->bind()->listen()->accept()->recv()->close()
共连接了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调整语句为:
- echo “net.ipv4.tcp_mem = 786432 2097152 3145728”>> /etc/sysctl.conf
- echo “net.ipv4.tcp_rmem = 4096 4096 16777216”>> /etc/sysctl.conf
- echo “net.ipv4.tcp_wmem = 4096 4096 16777216”>> /etc/sysctl.conf
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com