multithreading - 如何在 Gatling 中实现特定的线程数

标签 multithreading scala performance-testing load-testing gatling

是否有可能设置加特林场景以在特定线程数中运行?例如,我想在 1 小时内以 2500 个线程执行 1M 请求。

而且,每个场景(在 setUp(scn.inject()) 中)是否将在不同的线程中运行? Gatling 定义中的“线程”是什么意思 - 它与 Java 中的相同吗?

我找到了 topic ,但这并不完全是我所需要的(如果是主题开始,他只需要 3 个线程,但对我来说 - 数量要大得多)。

我有

val scn = scenario("Test")
    .exec(mine)
}

setUp(
    scn.inject(
        rampUsers(1000000) over (3600)
     )
).assertions(global.successfulRequests.percent.greaterThan(95))

最佳答案

topic 中所述您已经引用过,Gatling 将用于触发针对您的目标系统的请求的线程数不是并发用户数。这是实现细节。

加特林使用 Akka在后台并异步发出请求。这种异步特性意味着 Gatling 使用几个线程来触发所有请求。如果您想了解更多,请参阅 gatling-akka-defaults.conf .它使用 Akka Default Dispatcher它使用带有 aprox 的 fork-join 池。 CPU 内核数 * 2 个线程(不确定 100%,请参阅文档)。

正如在引用的主题中已经提到的,问题是 “用户”是什么意思? .

据我了解,您的目标是在您的系统上加载 2500 个并发用户。 Gatling 是否使用 2 或 1000 个线程来实现这一点并不重要。

因此,如果您想要 2500 个并发用户(每秒),只需编写:

setUp(
  scn.inject( constantUsersPerSec(2500) during(3600) )
)...

另一方面,如果您想要 2500 个不同的人口(这是 IMO 不希望的),您也可以通过以下方式实现这一目标:
// `scn` have to be function, while scenarios should havce distinct name
def scn(name: String) = scenario(name)
  .exec(
    http("root").get("/")
  )

setUp(
  (for {
    i <- 0 until 2500 // desired 2500
   } yield {
    scn(s"Test $i").inject(
      rampUsers(1) over (3600)
    )
  }).toList // setUp can accept List[PopulationBuilder]
)

人口应该用于以自己的速率和持续时间同时注入(inject)不同的场景或不同类型的用户。例如见 Advanced Tutorial, Step 2 .它们并非旨在模拟并发用户。您可以直接从代码中看到,从语法上讲,解决方案是可行的,但很麻烦。

关于multithreading - 如何在 Gatling 中实现特定的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226931/

相关文章:

multithreading - 如何从与其关联的线程中发出 CompletableFutures 已完成或已取消的信号?

scala - 递归函数不返回 Int

scala - 如何将列作为要加入的键的集合加入数据集?

http - Tomcat 和 JMeter 生成 HTTP 404 错误

java - 等待 JavaFX 应用程序线程完成事件处理?

c++ - WaitForSingleObject() 不返回 WAIT_ABANDONED

java - Web 应用程序数据库或 map 以提高性能

scala - 从 sbt 运行 Play 项目

c - 如何测量C中循环中几个函数的执行时间

java - Java 中每个应用程序使用一个记录器对象的性能