You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gatling中实现无用户到达峰值的平稳并发用户数下调

你当前拼接多个独立constantConcurrentUsers段的写法,阶段切换时Gatling会直接调整并发数,没有过渡过程,因此会出现用户量陡变的峰值,以下是两种可实现平稳无峰值调整的方案:

方案1:带恒定阶段的平滑阶梯下调

适合需要每个并发档位维持固定时长的场景,在档位切换时加入短过渡段实现平滑调整,代码示例如下:

// 固定写法,适用于固定阶梯档位
setUp(
  Test.inject(
    // 初始平稳拉起15并发
    rampConcurrentUsers(0) to 15 during 10,
    // 15并发维持1分钟
    constantConcurrentUsers(15) during 60,
    // 10秒平滑降到10并发
    rampConcurrentUsers(15) to 10 during 10,
    // 10并发维持1分钟
    constantConcurrentUsers(10) during 60,
    // 10秒平滑降到5并发
    rampConcurrentUsers(10) to 5 during 10,
    // 5并发维持1分钟
    constantConcurrentUsers(5) during 60
  )
)

如果需要动态生成阶梯,避免重复编码,可以用如下写法:

import io.gatling.core.Predef._
import scala.concurrent.duration._

val startConcurrency = 15
val endConcurrency = 5
val step = -5
val holdDuration = 60.seconds
val rampDuration = 10.seconds

val injectSteps = (startConcurrency to endConcurrency by step).sliding(2).flatMap { case Seq(current, next) =>
  Seq(
    constantConcurrentUsers(current) during holdDuration,
    rampConcurrentUsers(current) to next during rampDuration
  )
}.toSeq :+ constantConcurrentUsers(endConcurrency) during holdDuration

// 加上初始拉起逻辑可选
val fullInjectSteps = rampConcurrentUsers(0) to startConcurrency during rampDuration +: injectSteps

setUp(Test.inject(fullInjectSteps))
方案2:全程匀速平滑下调

如果不需要在每个并发档位停留,只需要实现每分钟降5个并发的整体速率,直接使用单段rampConcurrentUsers即可,完全无峰值:

setUp(
  Test.inject(
    // 2分钟从15平稳降到5,速率刚好是每分钟降5个
    rampConcurrentUsers(15) to 5 during 120.seconds
  )
)
补充说明
  • constantConcurrentUsers、rampConcurrentUsers都属于闭负载模型,核心是控制同时在线的并发用户数,和atOnceUsers所属的开负载模型逻辑不同:开负载模型控制的是用户的新增速率,不受业务响应耗时影响。如果你的场景需要和atOnceUsers逻辑完全一致,可以切换到开负载模型的rampUsersPerSec方法调整注入速率。
  • 过渡段的时长可以根据你的压测需求调整,设置的越长,并发数调整越平缓。

内容的提问来源于stack exchange,提问作者Iryna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 11:06:05