背景
最近客户端实现了一个基于websocket的消息推送功能:长连接网络交换机打开后启动,然后保持链接,每15分钟发送一个心跳包。当服务器有数据时,会直接发送并生效,所以需要对服务器进行压力测试。这次通过编写python脚本模拟压力测试,相关测试方法如下~
什么是网络套接字协议
网络套接字是一种通过单个TCP连接进行全双工通信的协议。WebSocket通信协议由IETF于2011年定义为RFC 6455,并由RFC7936补充。
WebSocket使客户端和服务器之间的数据交换更加容易,并允许服务器主动将数据推送到客户端。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,就可以直接创建持久连接,进行双向数据传输。
测试场景
1.同时创建一个长连接,在3分钟内建立一个22w的连接,将连接总数保持在22w左右,并间歇性地发出通知,检查服务器的稳定性
2.并发创建一个长连接,间断断开再连接,同时保证长连接在线22w左右,运行12小时,检查服务器的稳定性
测试步骤
1.编写脚本实现并发请求的并发
3.测试并查看服务器结果
(1)在4台linux机器上同时运行以上内容,保证并行22w用户
②检查服务器的cpu、内存、响应时间等指标信息
问题总结
1.一些linux系统中tcp链路的最大数量相对较小,不能同时支持6w的并发tcp链路。
原因:
tcp最大连接数与系统允许打开的最大文件数、用户允许打开的最大文件数、TCP网络连接的可用端口范围有关,取上述最小值。
一般设置规则是:系统中最大文件数>:可用端口>:用户最大文件数
修改可用端口的数量:
查看端口范围
sysctl-a | grep IP v4 . IP _ local _ port _ range
修改值:
vi/etc/sysctl.conf
修改可用端口
net . IP v4 . IP _ local _ port _ range = 1024 65535
修改用户的最大文件描述符和最大进程数
要查看当前值:
默认情况下,ulimit -n #中的最大文件数通常为1024
ulimit -u #中的最大进程数默认一般为60000+
#永久修改vi /etc/security/limits.conf
#修改的文件数* softnofile 10240 * hardnnofile 10240
#修改的进程数* softnoproc 60000 * hard noproc 60000
#临时修改ulimit -n 10240
上述永久修改方式的重启尚未生效,需要执行人
#结尾添加
session required/usr/lib 64/security/PAM _ limits . so
#用来告诉Linux,用户完成系统登录后,应该调用pam_limits.so来执行文件limit.conf
一般来说,您只需要修改用户的限制。
2.gevent是什么?
Python通过yield为协同学提供了基础支持,但不完整。第三方gevent为Python提供了相对完整的协作支持
Gevent是第三方库,通过greenlet实现协作。它的基本思想是,当一个小绿点遇到IO操作,比如访问网络,它会自动切换到其他小绿点,等到IO操作完成,然后在适当的时候切换回来继续执行。因为IO操作非常耗时,经常会让程序等待。gevent为我们自动切换协调,保证永远有greenlet在运行,而不是等待IO。
欢迎加入我们的搜狗测试微信号。如果你有更好的想法,欢迎在文章末尾留言。
1.《websocket在线测试 【评测】基于websocket协议的压力测试》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《websocket在线测试 【评测】基于websocket协议的压力测试》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1186410.html