一、websocket
1.1 压测目的
「WebSocket」压测的目的和意义是评估「WebSocket」服务的性能和稳定性。通过模拟大量并发连接和发送大量数据包,可以测试服务器在高负载情况下的响应速度、吞吐量和并发连接数等指标。
这有助于发现服务器在实际使用中可能出现的性能瓶颈和问题,并进行优化和调整,以确保服务器能够处理大规模的实时通信需求。
此外,「WebSocket」压测还可以验证服务器在长时间运行下是否会出现内存泄漏或其他稳定性问题,以提高系统的可靠性。
1.2 测试要点
首先在进行WebSocket压测时,一般需要注意以下5个方面:
1. 并发连接数:模拟真实场景下可能出现的并发连接数,并观察服务器在高负载情况下是否能够正常处理请求。
2. 数据包大小:根据实际需求设置合适大小的数据包,并观察服务器在处理不同大小数据包时的性能表现。
3. 响应时间:记录每个请求的响应时间,并分析是否存在延迟或超时问题。
4. 吞吐量:观察服务器在单位时间内处理请求数量,评估其处理能力。
5. 稳定性:长时间运行测试以验证服务器是否会出现内存泄漏或其他稳定性问题。
1.3 工具的选用
本次使用免费的Apache Jmeter工具测试并发数,和自制工具进行测试长连接。
二、Jmeter工具的使用
2.1 下载链接
https://jmeter.apache.org/download_jmeter.cgi
2.2 websocket插件下载链接
pjtr / JMeter WebSocket Samplers / Downloads — Bitbucket
2.3 将Jmeter解压缩后打开
将下载的websocket插件放入Jmeter的lib下的ext目录下
双击bin目录下的ApacheJMeter.jar
2.4 使用Jmeter测试websocket步骤
实现websocket服务端,在我的另一篇博客中有讲过
SpringBoot实现websocket服务端及客户端_springboot websocket 客户端-CSDN博客
在Jmeter工具中,右击测试计划---》添加----》线程(用户)----》线程组
在线程组中右击---》添加---》配置元件---》计数器
线程组右击---》添加---》取样器---》websocket open connection
在新建的Websocket Open Connection中填入后台协议升级的接口IP、端口以及路径地址,其中路径里使用了变量${userId}
线程组右击---》添加---》取样器---》WebSocket request-response Sampler,用于发送和接收返回消息
在Connection里选中use existing connection,也就是会使用上面WebSocket Open Connection组件建立的连接,可以设置响应超时时间,用来测试你想要的性能
线程组---》添加---》监听器---》查看结果树
到这,就可以进行测试了,在线程组中可设置线程数量
三、测试结果
3.1 300线程结果
可以在这设置需要的文件,错误日志或成功日志
3.2 影响WebSocket连接数的因素
1.处理器性能:服务器的处理器性能决定了其在单位时间内可以处理的连接数。较高性能的处理器可以更快地处理连接请求和数据传输,从而支持更多的连接数。
2. 内存容量:服务器的内存容量决定了其可以同时维护的连接数。每个连接都需要占用一定的内存资源,包括缓冲区、会话状态等。较大的内存容量可以支持更多的连接。
3.硬盘速度:服务器硬盘的读写速度对于处理连接请求和数据传输也有影响。较高速度的硬盘可以更快地读取和写入数据,提高服务器响应速度,从而支持更多的连接。
4.网络带宽和延迟:服务器所在网络环境的带宽限制了其可以同时处理的连接数。较高带宽可以支持更多数据传输,从而提供更多连接服务。
延迟是指数据从发送端到接收端所需的时间。较低的延迟可以提高连接响应速度,使得服务器能够更快地处理连接请求和数据传输。
如果延迟较高,则可能会导致连接响应变慢或超时,限制了服务器能够同时处理的连接数。
5.WebSocket协议本身对连接数的限制:在计算机网络中,TCP连接是通过IP地址和端口号来唯一标识的。
四、 总结与建议
4.1. 服务很容易出现OOM和服务假死
OOM:内存溢出,需要长时间的压测,观察内存是否释放,比如:每秒%0.1的内存占用累加,最后OOM
服务假死:大量发送同步消息,CPU占满,导致假死,现象有:
1 客户端全部断开
2 服务占用CPU100%,一直不释放
3 服务停止打印日志
4 CLOSE_WAIT关闭很慢
2 压测过程中一定要及时记录服务器性能和服务日志和报错相关信息,避免出现漏侧。通过记录的数据可以分析出问题所在,可以对症进行优化。
3 分析压测结果,分析服务所存在的瓶颈,为后面服务扩容做好准备。做好预案,比如服务假死后,怎么重启服务来满足连接服务。还有结合客户端发送心跳时需要随机发送,避免服务重启造成同时间造成大量建立连接,出现问题。