JMeter实战2--阶梯线程组及计算逻辑

📅 发布时间:2026/7/11 9:28:31 👁️ 浏览次数:
JMeter实战2--阶梯线程组及计算逻辑
一、压力测试的计算逻辑线程组定义场景线程数定义用户量用户量决定并发压力1个线程组 1个测试场景1个线程数 1个虚拟用户样本数 接口请求次数 用户数量 × 每个用户执行的次数 用户数量 × 每个用户每秒请求率 × 运行时长≈ 用户数量 × 1 ÷ (接口响应时间 思考时间) × 运行时长样本数接口请求次数与用户数量线程数、运行时长增长持续衰退、接口响应时间有关系二、不同线程组对比入门新手普通线程组模拟真实用户Stepping Thread Group复杂场景Ultimate Thread Group精确并发Concurrency Thread Group1.基础对比2.配置方式对比表3.选择哪种方式开始↓需要复杂负载模式↓是 → 选择 Ultimate Thread Group最灵活↓否 → 需要模拟用户逐步进入↓是 → 选择 Stepping Thread Group↓否 → 需要精确控制并发数↓是 → 选择 Concurrency Thread Group↓否 → 选择 普通线程组最简单三、阶梯线程组Stepping Thread Group阶梯线程组的核心通过hold load时间控制最大并发数通过add every控制增长速度必须配合循环次数和总时间限制使用。1.核心参数详解必须理解的7个参数1. This group will start [N] threads - 只是测试名称不是限制实际线程数由后续参数决定 2. First, wait for [X] seconds - 初始等待时间测试开始前的延迟 3. Then start [A] threads - 初始启动的线程数用户数 4. Next, add [B] threads every [C] seconds - 核心每C秒增加B个线程 - ⚠️ 没有until选项时会无限增加 5. using ramp-up [D] seconds - 每批线程启动的时间间隔 6. Then hold load for [E] seconds - 停止增加线程保持当前负载E秒 - ⚠️ 这是停止增加的关键时间点 7. Finally, stop [F] threads every [G] seconds - 每G秒停止F个线程最大线程数 初始线程 (增加间隔数 × 每次增加数)2.标准压力测试推荐名称[业务名称]_压力测试This group will start: [业务名称]测试First, wait for: 5 seconds ← 给监控系统准备时间Then start: [峰值用户数 × 10%] threads ← 温和启动Next, add: [每次增加5-10%峰值] threads every: [10-30] secondsusing ramp-up: [增加线程数 × 0.2-0.5] seconds ← 平滑启动Then hold load for: [主要测试时间] seconds ← 核心测试阶段Finally, stop: [与增加数相当] threads every: [5-15] seconds循环次数∞ 或 留空 ← 持续执行运行时控制器外层添加限制总时间3.冒烟测试简单验证First, wait for: 0Then start: 5Next, add: 5 threads every: 10 secondsusing ramp-up: 5Then hold load for: 30Finally, stop: 5 threads every: 5循环次数1 ← 每人执行1次4.100个用户的示例This group will start: 100用户测试First, wait for: 0Then start: 10Next, add: 10 threads every: 5 secondsusing ramp-up: 3Then hold load for: 30Finally, stop: 10 threads every: 5时间线计算增加阶段从10到100用户每次加10需要加9次9 × 5秒 45秒达到100用户保持阶段30秒100用户并发停止阶段100 ÷ 10 10次停止10 × 5秒 50秒停止完毕总时间45 30 50 125秒5.快速配置口诀一算目标用户数二定增长时间段三设合理ramp-up四加时间控制器五验曲线对不对六看监控调参数。四、并发线程组Concurrency Thread Group设目标、定时间、分阶梯、保时长四步完成专业压力测试配置1.核心参数详解1. Target Concurrency (目标并发数)- 测试要达到的最大并发用户数- 示例100 最多100个用户同时在线2. Ramp Up Time (启动时间秒)- 从0达到目标并发数所需的总时间- 示例60 60秒内从0增加到100用户3. Ramp-Up Steps Count (阶梯数)- 将启动时间分为几个阶梯- 示例10 分10个阶梯增加到目标4. Hold Target Rate Time (保持时间秒)- 达到目标并发数后保持的时间- 示例120 保持100用户并发120秒5. Time Unit (时间单位)- 通常选择seconds(秒)6. Thread Iterations Limit (线程迭代限制)- 每个线程执行的循环次数- ∞ 或留空 无限循环直到时间结束7. Log Threads Status into File (记录线程状态到文件)- 可选用于调试线程状态变化8. Concurrency Limit Schedule (并发限制计划)- 可添加多行定义不同的并发阶段配置流程1. 确定测试目标并发数、时间2. 设置合理的阶梯数5-20之间3. 必须设置保持时间至少30秒4. 添加运行时控制器限制总时间可选5. 先用小参数验证配置6. 添加活动线程数监听器验证曲线阶梯数选择原则短时间测试60秒阶梯数 5-10中时间测试1-10分钟阶梯数 10-15长时间测试10分钟阶梯数 15-202.参数计算与理解每个阶梯的并发增量 目标并发数 ÷ 阶梯数每个阶梯的时间 启动时间 ÷ 阶梯数示例目标100用户启动时间60秒阶梯数10- 每个阶梯增加100 ÷ 10 10用户- 每个阶梯时间60 ÷ 10 6秒- 结果每6秒增加10用户60秒达到100用户3.标准压力测试模板Target Concurrency: 100 # 目标100并发用户Ramp Up Time: 60 # 60秒内达到Ramp-Up Steps Count: 10 # 分10个阶梯Hold Target Rate Time: 300 # 保持300秒5分钟Thread Iterations Limit: ∞ # 无限循环4.快速峰值测试模板Target Concurrency: 50Ramp Up Time: 10 # 快速增加Ramp-Up Steps Count: 5 # 分5个阶梯Hold Target Rate Time: 30 # 保持30秒5.稳定性测试模板Target Concurrency: 20Ramp Up Time: 120 # 缓慢增加Ramp-Up Steps Count: 20 # 精细控制Hold Target Rate Time: 3600 # 保持1小时五、终极线程组Ultimate Thread Group表格化多阶段配置Delay时间要精确计算预览图必须验证配合监听器确保曲线正确。1.界面参数详解Start Threads Count Initial Delay Startup Time Hold Load For Shutdown Time[初始线程数] [初始延迟秒] [启动时间秒] [保持时间秒] [关闭时间秒]每列具体含义2.配置示例与计算示例1标准三阶段测试预热-峰值-恢复Start Delay Startup Hold Shutdown 描述50 0 60 120 30 预热阶段200 210 30 300 60 峰值阶段50 590 60 180 30 恢复阶段计算总时间阶段10 60 120 30 210秒阶段2210 30 300 60 600秒阶段3590 60 180 30 860秒总测试时间860秒 ≈ 14分钟示例2工作日负载模拟8小时Start Delay Startup Hold Shutdown100 0 1800 21600 1800 上午负载200 28800 1800 14400 1800 下午高峰50 46800 900 3600 900 晚间负载模板1电商大促双十一模型Start Delay Startup Hold Shutdown 说明1000 0 3600 14400 1800 预热1小时到1000保持4小时5000 19800 1800 7200 3600 高峰0.5小时到5000保持2小时2000 32400 3600 21600 1800 持续1小时降到2000保持6小时800 55800 1800 10800 1800 收尾0.5小时到800保持3小时模板2API稳定性测试24小时Start Delay Startup Hold Shutdown50 0 1800 75600 1800 全天基础负载200 79200 3600 14400 3600 白天高峰80 97200 1800 21600 1800 夜间负载模板3性能拐点测试Start Delay Startup Hold Shutdown50 0 60 300 30100 390 30 300 30150 750 30 300 30200 1110 30 300 30250 1470 30 300 30300 1830 30 300 30 ← 逐步增加找拐点3.注意事项⚠️1Delay时间计算容易出错错误Delay 上个阶段的Hold时间 正确Delay 上个阶段的(Startup Hold Shutdown) 示例 阶段1Startup60, Hold120, Shutdown30 阶段2的Delay应该是6012030210秒⚠️2线程数是累计还是独立独立设置每行的Start Threads都是独立目标不会累计阶段2的100线程不是在上阶段基础上增加100⚠️3Shutdown Time必须设置如果不设置或设为0线程会立即停止影响测试结果准确性建议设为Startup Time的1/3到1/2⚠️4时间重叠问题错误配置 行1Delay0, Startup60, Hold120, Shutdown30 (总210秒) 行2Delay180, ... ← 重叠了行1还在运行 行1运行时间0-210秒 行2开始时间180秒 ← 在行1结束前就开始六、添加监视器1. 验证曲线jpgc - Active Threads Over Time通过JMeter Plugins Manager安装 1. jpgc-graphs-basic 2. jpgc-graphs-additional作用实时显示并发用户数变化曲线验证线程组配置是否正确执行。2. 监控TPSjpgc - Transactions per Second通过JMeter Plugins Manager安装 1. jpgc-graphs-basic 2. jpgc-graphs-additional作用监控实际业务压力显示系统每秒处理的请求数TPS。3. 聚合报告整体性能作用整体性能数据汇总统计1关键指标解析2实际应用示例分析登录接口性能Label: Login_API# Samples: 1000 (共1000次请求)Average: 120ms (平均响应时间120ms)90% Line: 200ms (90%请求在200ms内)95% Line: 250ms (95%请求在250ms内)Error %: 0.5% (错误率0.5%5个请求失败)Throughput: 50.2/sec (TPS为50.2)3注意事项90% Line比Average更重要关注大多数用户的体验Error %必须为0生产环境要求错误率接近0Max值异常高可能有单个请求卡住需排查中位数≈平均值响应时间分布均匀4.响应时间趋势 jpgc - Response Times Over Time作用响应时间趋势变化实时监控1图形解读2实际案例分析案例1内存泄漏时间线0-30分钟响应时间平稳在100ms30-60分钟逐步上升到500ms60分钟后持续高位偶尔尖峰分析可能存在内存泄漏需要检查GC日志案例2数据库连接池耗尽特征响应时间周期性波动图形规律性的波浪形低点50ms高点2000ms周期每10分钟一次分析连接池回收或缓存失效案例3外部依赖超时特征随机尖峰图形平稳线 偶尔的垂直尖峰基线80ms尖峰5000ms分析第三方接口超时或网络问题注意事项与活动线程数图对照看响应时间上升时看并发是否增加关注分位线间距50%和90%线间距大说明响应不稳定设置合理的Y轴范围避免个别尖峰压缩图形显示5.服务器监控jpgc - PerfMon Metrics Collector作用服务器资源监控CPU、内存、磁盘、网络1监控指标范围服务器监控CPU、内存、磁盘、网络等指标日志监控实时查看应用日志服务状态检查检查进程、端口、服务状态自定义监控执行任何Shell命令收集数据2添加方法# 通过JMeter Plugins Manager安装 1. 打开JMeter → 选项 → Plugins Manager 2. 搜索 SSH 3. 安装 SSHMon Samples Collector添加 → 监听器 → jpgc - SSHMon Sampler Collector3配置信息详解完整配置参数jpgc - SSHMon Sampler Collector├── Server: ____________ (服务器地址)├── Port: 22 (SSH端口)├── Username: __________ (SSH用户名)├── Password: __________ (密码)├── Private Key: _______ (私钥文件路径 - 替代密码)├── Commands to execute: (多行文本框每行一个命令)├── Label for requests: __________ (请求标签)├── Use TTY: ☐ (是否使用伪终端)├── Timeout: 30 (超时时间秒)├── Print stderr: ☐ (是否打印错误输出)├── Use return code: ☐ (是否使用返回码作为结果)└── Interval (ms): 5000 (执行间隔毫秒)各参数详细说明