JMeter 疲劳测试
·
JMeter 疲劳测试(Endurance Testing / Soak Testing) 核心是:用稳定的中低并发,长时间持续压测,验证系统在长时间运行下的稳定性、内存泄漏、资源耗尽、连接泄漏等隐性问题。
一、核心特点(与压力 / 负载测试区别)
- 压力测试:找极限、冲峰值、看崩溃点
- 负载测试:看额定负载下的性能(TPS、响应时间)
- 疲劳测试:长时间、稳并发、看稳定性
- 并发:日常峰值的 50%~80%(稳定即可)
- 时长:几小时 → 1 天 → 7 天(按业务要求)
- 关注点:错误率、内存、CPU、磁盘、连接数、日志报错
二、JMeter 疲劳测试完整步骤
1. 明确测试目标
- 并发用户数:如 100/200/500(日常稳定值)
- 持续时间:24 小时 / 72 小时 / 7 天
- 合格指标:
- 错误率 0% 或 < 0.1%
- 响应时间无明显逐渐变长
- CPU / 内存 / 磁盘 / 连接数不持续上涨、不溢出
- 无内存泄漏、无堆溢出、无连接泄漏
2. 脚本准备(基础接口 / 业务流程)
-
新建测试计划 → 线程组
-
添加 HTTP 请求默认值、信息头管理器

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

-
添加断言(响应码 200、业务 code 正确)
-
参数化(用户、数据用 CSV,避免重复)
-
定时器(可选):思考时间、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
- Duration (seconds):填写总时长(秒)
要点:固定并发 + 永远循环 + 调度器时长 = 标准疲劳
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 报告(测试结束后)
三、关键指标与判断标准
在聚合报告和服务器监控中重点看:
-
错误率 Error%
- 要求:0% 或 < 0.1%
- 出现上涨 → 系统不稳定、资源耗尽、连接满
-
响应时间
- 要求:平稳、不持续上升
- 逐渐变长 → 内存泄漏、GC 频繁、连接池堵塞
-
吞吐量 (TPS/Throughput)
- 要求:平稳、不明显下跌
-
服务器内存
- 要求:稳定在合理区间,不无限上涨
- 一直涨不回落 → 内存泄漏(典型疲劳问题)
-
GC 情况
- FullGC 频率、耗时
- FullGC 越来越频繁、耗时越来越长 → 内存问题
-
数据库连接数 / 文件句柄
- 不持续上涨、不达到上限 → 连接泄漏
四、常见问题与原因
- 错误率逐渐上升
- 连接池耗尽、数据库死锁、线程死锁、文件句柄满
- 响应时间越来越慢
- 内存泄漏、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 疲劳 = 稳定并发 + 永远循环 + 长时间调度 + 全链路监控,核心抓错误率、内存、响应时间趋势。
更多推荐
所有评论(0)