使用 JMeter 进行 WebSocket 最大连接数测试,核心是模拟大量并发客户端同时建立连接,验证服务端能支撑的极限连接数及稳定性。以下是详细的测试方案和操作步骤:
一、准备工作
-
工具与插件
- 安装 JMeter(推荐 5.6+ 版本,兼容性更好)。
- 安装 WebSocket 插件:
- 方式 1:通过 JMeter 插件管理器(
Options -> Plugins Manager),搜索 WebSocket Sampler by Peter Doornbosch 并安装。
- 方式 2:手动下载 插件 JAR(如
websocket-sampler-1.2.8.jar),放入 JMeter 的 lib/ext 目录,重启 JMeter。
-
测试环境
二、测试计划设计
核心目标
- 验证服务端能稳定维持的最大并发 WebSocket 连接数。
- 观察连接建立过程中的失败率、响应时间,以及服务端资源(CPU、内存、句柄)变化。
测试计划配置步骤
-
创建测试计划打开 JMeter,新建测试计划(Test Plan),命名为 “WebSocket 最大连接测试”。
-
添加线程组
- 右键测试计划 →
Add -> Threads (Users) -> Thread Group。
- 关键配置:
Number of Threads (users):总并发用户数(即最大连接数,如 10000)。
Ramp-Up Period (in seconds):线程启动时间(控制连接建立速度,如 60 秒启动 10000 线程,避免瞬间压垮服务端)。
Loop Count:循环次数(设为 1,每个线程建立 1 次连接)。
Same user on each iteration:勾选(确保每个线程使用独立的连接)。
-
添加 WebSocket 连接 sampler 右键线程组 → Add -> Sampler -> WebSocket Open Connection,配置连接参数:
Server Name or IP:WebSocket 服务端 IP。
Port Number:服务端端口(如 19969)。
Path:WebSocket 路径(如 /notice?_userId=${userId},需动态传入用户 ID)。
Timeout (in milliseconds):连接超时时间(如 10000 毫秒)。
-
动态生成用户 ID(可选)若服务端需区分用户(如通过 _userId 参数),需为每个连接生成唯一 ID:
- 右键线程组 →
Add -> Config Element -> User Defined Variables,添加变量 baseUserId=8982039
- 右键线程组 →
Add -> Config Element -> Counter,配置:
Start:0
Increment:1
Reference Name:userIdOffset
Maximum value:10000(与线程数一致)。
- 在 WebSocket 路径中引用:
/notice?_userId=${__intSum(${baseUserId},${userIdOffset})}(生成 8982039~8992038 的唯一 ID)。
-
维持连接(关键)为避免连接建立后立即关闭,需添加 “保持连接” 的逻辑:
- 右键线程组 →
Add -> Sampler -> Constant Timer,设置 Constant Delay (in milliseconds) 为测试持续时间(如 300000 毫秒 = 5 分钟),确保连接至少维持 5 分钟。
-
添加监听器(结果分析)
- 右键线程组 →
Add -> Listener -> Summary Report:查看总连接数、成功 / 失败数、平均响应时间。
- 右键线程组 →
Add -> Listener -> View Results Tree:查看单条连接的详细日志(用于排查失败原因)。
- 右键线程组 →
Add -> Listener -> Aggregate Report:统计 90%/95% 响应时间等指标。
三、测试执行与调优
-
逐步加压策略不要直接测试最大连接数,先从低并发开始(如 1000 连接),观察服务端状态:
- 若连接成功率 100%,服务端资源稳定,逐步增加并发数(每次增加 5000 或翻倍)。
- 记录 “连接成功率骤降”“响应时间突增” 的拐点,即为服务端的极限连接数。
-
监控指标
- 服务端指标:
- 系统资源:CPU 使用率、内存占用、网络 IO、打开文件句柄数(
lsof | wc -l)。
- 应用指标:并发连接数(通过服务端日志或监控工具)、连接拒绝数。
- JMeter 指标:
- 连接成功率(需 ≥ 99% 才算稳定)。
- 平均连接建立时间(正常应 < 1 秒)。
四、注意事项
-
JMeter 自身限制
- JMeter 是单进程工具,受限于 JVM 内存和系统资源,单台机器可能无法模拟超大规模连接(如 10 万 +)。此时需:
- 增加 JMeter 堆内存(修改
jmeter/bin/jmeter.properties 中的 HEAP="-Xms2g -Xmx10g")。
- 采用分布式测试(多台机器同时运行 JMeter 客户端,协同模拟高并发)。
-
连接关闭处理测试结束后,需确保连接正常关闭,避免服务端资源泄漏:
- 可在 “保持连接” 后添加
WebSocket Close sampler(取样器),主动关闭连接。
-
与代码测试对比JMeter 适合快速验证最大连接数,但复杂场景(如消息交互、异常处理)建议结合 Python 脚本( websockets 相关脚本)进行补充测试。