JMeter 疲劳测试(Endurance Testing / Soak Testing) 核心是:用稳定的中低并发,长时间持续压测,验证系统在长时间运行下的稳定性、内存泄漏、资源耗尽、连接泄漏等隐性问题。

一、核心特点(与压力 / 负载测试区别)

  • 压力测试:找极限、冲峰值、看崩溃点
  • 负载测试:看额定负载下的性能(TPS、响应时间)
  • 疲劳测试长时间、稳并发、看稳定性
    • 并发:日常峰值的 50%~80%(稳定即可)
    • 时长:几小时 → 1 天 → 7 天(按业务要求)
    • 关注点:错误率、内存、CPU、磁盘、连接数、日志报错

二、JMeter 疲劳测试完整步骤

1. 明确测试目标
  • 并发用户数:如 100/200/500(日常稳定值)
  • 持续时间:24 小时 / 72 小时 / 7 天
  • 合格指标:
    • 错误率 0% 或 < 0.1%
    • 响应时间无明显逐渐变长
    • CPU / 内存 / 磁盘 / 连接数不持续上涨、不溢出
    • 无内存泄漏、无堆溢出、无连接泄漏
2. 脚本准备(基础接口 / 业务流程)
  1. 新建测试计划 → 线程组

  2. 添加 HTTP 请求默认值、信息头管理器

3.添加 HTTP 请求(接口地址、方法、参数)

  1. 添加断言(响应码 200、业务 code 正确)

  2. 参数化(用户、数据用 CSV,避免重复)

  3. 定时器(可选):思考时间、Constant Timer 模拟真实节奏

3. 线程组关键配置(疲劳模式)

右键 → 添加 → 线程(用户)→ 线程组

  • Number of Threads (线程数):稳定并发(如 100)
  • Ramp-Up Period (秒)60~300 秒平缓启动(避免瞬间冲击)
  • Loop Count:勾选 Forever(永远循环)
  • Scheduler(调度器):勾选
    • Duration (seconds):填写总时长(秒)
      • 1 小时 = 3600
      • 12 小时 = 43200
      • 24 小时 = 86400
      • 7 天 = 604800
    • Startup Delay:一般 0

要点:固定并发 + 永远循环 + 调度器时长 = 标准疲劳

4. 监听器配置(精简!)

GUI 只用于调试;正式压测必须命令行。建议保留:

  • 聚合报告(TPS、响应时间、错误率)
  • 查看结果树(调试用,正式关闭)
  • 后端监听器(对接 InfluxDB+Grafana 长期监控)
  • 生成 jtl 结果日志(便于事后分析)
5. 服务器监控(必做)

疲劳测试必须同时监控服务器:

  • CPU(使用率、负载)
  • 内存(堆、非堆、GC、是否泄漏)
  • 磁盘 IO、磁盘空间
  • 网络
  • 线程数、数据库连接数、文件句柄

工具:

  • Linux:top, free, df, iostat, netstat, jstat, jmap
  • Windows:任务管理器、性能监视器
  • 集成:Prometheus + Grafana / Zabbix / SkyWalking
6. 命令行执行(唯一推荐方式)

bash

运行

jmeter -n -t 疲劳测试脚本.jmx -l 结果.jtl -e -o 报告目录
  • -n:非 GUI
  • -t:指定脚本
  • -l:记录结果
  • -e -o:生成 HTML 报告(测试结束后)

三、关键指标与判断标准

聚合报告和服务器监控中重点看:

  1. 错误率 Error%

    • 要求:0% 或 < 0.1%
    • 出现上涨 → 系统不稳定、资源耗尽、连接满
  2. 响应时间

    • 要求:平稳、不持续上升
    • 逐渐变长 → 内存泄漏、GC 频繁、连接池堵塞
  3. 吞吐量 (TPS/Throughput)

    • 要求:平稳、不明显下跌
  4. 服务器内存

    • 要求:稳定在合理区间,不无限上涨
    • 一直涨不回落 → 内存泄漏(典型疲劳问题)
  5. GC 情况

    • FullGC 频率、耗时
    • FullGC 越来越频繁、耗时越来越长 → 内存问题
  6. 数据库连接数 / 文件句柄

    • 不持续上涨、不达到上限 → 连接泄漏

四、常见问题与原因

  • 错误率逐渐上升
    • 连接池耗尽、数据库死锁、线程死锁、文件句柄满
  • 响应时间越来越慢
    • 内存泄漏、GC 频繁、缓存失效、磁盘 IO 高
  • CPU 突然飙升
    • 死循环、GC 风暴、慢 SQL、大量重试
  • 运行几小时后大量超时 / 报错
    • 连接泄漏、内存溢出、磁盘满、线程耗尽

五、实战示例(24 小时疲劳)

  • 线程数:200
  • Ramp-Up:120 秒
  • 循环:Forever
  • 时长:86400 秒(24h)
  • 业务:登录 → 列表 → 详情 → 下单(完整流程)
  • 监控:CPU、内存、GC、连接数、错误率
  • 判定:24 小时内 错误率 = 0,内存平稳,无 FullGC 风暴 → 通过

六、进阶建议

  • 长时间(>24h):用 Linux 后台 nohup 运行,防止断连

    bash

    运行

    nohup jmeter -n -t 脚本.jmx -l result.jtl &
    
  • 分布式压测:并发高时用多机分布式
  • 自动告警:Grafana 设阈值告警(内存 > 90%、错误率 > 0)
  • 分段分析:每 6/12 小时记录一次指标,看趋势

一句话总结:JMeter 疲劳 = 稳定并发 + 永远循环 + 长时间调度 + 全链路监控,核心抓错误率、内存、响应时间趋势

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐