websocket测试方式(linux入门基础)

背景

最近客户端实现了一个基于websocket的消息推送功能:长连接网络开关下发开后启动,然后保持链接,每隔15分钟发一次心跳包,服务器有数据时直接下发生效,因此需要对服务器进行压测。本次通过写python脚本的方法模拟并发进行压力测试,相关测试方法如下~

什么是websocket协议

WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

测试场景

1.并发创建长连接,3min内建立连接22w,总连接数维持在22w左右,间歇下发通知,查看服务器的稳定性

2.并发创建长连接,间歇性断开并重连,保证同时在线的长连接在22w左右,运行12H,查看服务器的稳定性

测试步骤

1. 编写脚本实现并发请求并发

websocket测试方式(linux入门基础)

2.搭建测试环境

①找1台liunx机器,搭建python运行环境,安装脚本支持的包、模块

②运行websocket脚本,保证脚本正常运行

③ 编写run_test.sh脚本,运行多个websocket.py,单机大约可同时并发大约5w~6w的tcp链接,视linux 系统内核而定(因为本次需要同时并发22w,共4台liunx机器,所以单台并发6w左右)

3. 进行测试及查看服务器结果

①同时在4台linux机器中运行以上内容,保证可并行22w的用户量

②查看服务器的cpu、内存、响应时间等指标信息

问题总结

1. 有些linux系统最大tcp链接数比较小,无法支持同时并发6w量的tcp链接?

原因:

最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值;

一般的设置规则为:系统最大文件数>可用端口>用户最大文件数

修改可用端口数:

查看端口范围

sysctl -a |grep ipv4.ip_local_port_range

修改值:

vi/etc/sysctl.conf

修改可用端口数

net.ipv4.ip_local_port_range = 1024 65535

修改用户最大文件描述符和最大进程数

查看当前值:

ulimit -n # 最大文件数,一般默认为1024个

ulimit -u #最大进程数,一般为默认60000

#永久修改 vi /etc/security/limits.conf

#修改文件数 * soft nofile 10240 * hardnofile 10240

#修改进程数 * soft noproc 60000 * hardnoproc 60000

#临时修改 ulimit -n 10240

上面的永久修改方式重启还不会生效,需要执行者

# 在末尾添加

sessionrequired /usr/lib64/security/pam_limits.so

# 作用是告诉Linux在用户完成系统登录后,应该调用pam_limits.so 来执行limit.conf这个文件

一般来说,只需要修改用户的限制就可以了。

2.什么是gevent?

Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持

gevent是第三方库,通过greenlet实现协程,其基本思想是:当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。

发表评论

登录后才能评论