使用jmeter对websocket服务做压测

一、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 分析压测结果,分析服务所存在的瓶颈,为后面服务扩容做好准备。做好预案,比如服务假死后,怎么重启服务来满足连接服务。还有结合客户端发送心跳时需要随机发送,避免服务重启造成同时间造成大量建立连接,出现问题。

### 使用JMeter进行WebSocket性能试的详细步骤 #### 安装必要的插件 为了使 Apache JMeter 支持 WebSocket 试,需安装特定插件。这可以通过访问 JMeter 插件管理器官方下载页面完成,之后按照指引安装 JMeter Plugins Manager[^1]。一旦成功安装了插件管理器,在 JMeter 中可通过 `Options` -> `Plugin Manager` 访问它;接着在 `Available Plugins` 标签页下查找并安装名为 WebSocket Sampler 的组件,该工具专为 WebSocket 服务试设计[^3]。 #### 创建新的试计划 启动 JMeter 后,创建一个新的试计划作为项目的基础结构。此操作通常由软件界面中的选项轻松达成。 #### 添加线程组 在线程 (用户) 组中定义模拟用户的数量以及这些虚拟用户的行为模式——例如并发数、循环次数等参数设置对于模拟真实负载至关重要。 #### 配置采样器 添加 WebSocket Sampler 到线程组内以配置具体的请求细节。在此过程中指定目标服务器地址、端口号、路径以及其他连接属性。此外还需设定消息发送方式(单次/持续)、预期响应时间及其他验证逻辑来评估交互过程是否符合预期[^2]。 #### 设置监听器 加入监听器以便收集和分析执行期间产生的数据。常用的选择有聚合报告、查看结果树形图等形式,它们有助于直观理解系统的整体表现情况。 ```python # Python 示例代码仅作示意用途,并非实际可运行脚本 import jmeter_api as jm test_plan = jm.TestPlan(name="WebSocket Performance Test") thread_group = jm.ThreadGroup( name="User Simulation", num_threads=50, ramp_up_period=60, loop_count=1 ) web_socket_sampler = jm.WebSocketSampler( server_name_or_ip="example.com", port_number=8080, websocket_path="/ws" ) listener = jm.AggregateReport() test_plan.add_thread_group(thread_group) thread_group.add_element(web_socket_sampler) thread_group.add_element(listener) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值