回到顶部

阅读目录

jmeter 做 WebSocket 最大连接数测试

使用 JMeter 进行 WebSocket 最大连接数测试,核心是模拟大量并发客户端同时建立连接,验证服务端能支撑的极限连接数及稳定性。以下是详细的测试方案和操作步骤:

一、准备工作

  1. 工具与插件

    • 安装 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。
  2. 测试环境

    • 确保服务端与 JMeter 客户端网络通畅,避免网络带宽成为瓶颈。
    • 调整 JMeter 所在机器的系统参数(以 Linux 为例),支持大量并发连接:
      # 临时调整最大文件句柄数(JMeter 需重启生效)
      ulimit -n 655350  
      # 调整 TCP 连接参数
      sysctl -w net.ipv4.tcp_tw_reuse=1  # 复用 TIME_WAIT 端口
      sysctl -w net.ipv4.ip_local_port_range="1024 65535"  # 扩大本地端口范围

二、测试计划设计

核心目标

  • 验证服务端能稳定维持的最大并发 WebSocket 连接数。
  • 观察连接建立过程中的失败率、响应时间,以及服务端资源(CPU、内存、句柄)变化。

测试计划配置步骤

  1. 创建测试计划打开 JMeter,新建测试计划(Test Plan),命名为 “WebSocket 最大连接测试”。

  2. 添加线程组

    • 右键测试计划 → 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:勾选(确保每个线程使用独立的连接)。
  3. 添加 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 毫秒)。
  4. 动态生成用户 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)。
  5. 维持连接(关键)为避免连接建立后立即关闭,需添加 “保持连接” 的逻辑:

    • 右键线程组 → Add -> Sampler -> Constant Timer,设置 Constant Delay (in milliseconds) 为测试持续时间(如 300000 毫秒 = 5 分钟),确保连接至少维持 5 分钟。
  6. 添加监听器(结果分析)

    • 右键线程组 → Add -> Listener -> Summary Report:查看总连接数、成功 / 失败数、平均响应时间。
    • 右键线程组 → Add -> Listener -> View Results Tree:查看单条连接的详细日志(用于排查失败原因)。
    • 右键线程组 → Add -> Listener -> Aggregate Report:统计 90%/95% 响应时间等指标。

三、测试执行与调优

  1. 逐步加压策略不要直接测试最大连接数,先从低并发开始(如 1000 连接),观察服务端状态:

    • 若连接成功率 100%,服务端资源稳定,逐步增加并发数(每次增加 5000 或翻倍)。
    • 记录 “连接成功率骤降”“响应时间突增” 的拐点,即为服务端的极限连接数。
  2. 监控指标

    • 服务端指标
      • 系统资源:CPU 使用率、内存占用、网络 IO、打开文件句柄数(lsof | wc -l)。
      • 应用指标:并发连接数(通过服务端日志或监控工具)、连接拒绝数。
    • JMeter 指标
      • 连接成功率(需 ≥ 99% 才算稳定)。
      • 平均连接建立时间(正常应 < 1 秒)。

四、注意事项

  1. JMeter 自身限制

    • JMeter 是单进程工具,受限于 JVM 内存和系统资源,单台机器可能无法模拟超大规模连接(如 10 万 +)。此时需:
      • 增加 JMeter 堆内存(修改 jmeter/bin/jmeter.properties 中的 HEAP="-Xms2g -Xmx10g")。
      • 采用分布式测试(多台机器同时运行 JMeter 客户端,协同模拟高并发)。
  2. 连接关闭处理测试结束后,需确保连接正常关闭,避免服务端资源泄漏:

    • 可在 “保持连接” 后添加 WebSocket Close sampler(取样器),主动关闭连接。
  3. 与代码测试对比JMeter 适合快速验证最大连接数,但复杂场景(如消息交互、异常处理)建议结合 Python 脚本( websockets  相关脚本)进行补充测试。

 


^_^
请喝咖啡 ×

文章部分资料可能来源于网络,如有侵权请告知删除。谢谢!

前一篇: hoppscotch:开源 API 测试神器,轻量、隐私、免费,github 近 10万星标
captcha