Wrk vs Gatling 基准测试比较

Wrk vs Gatling benchmark test comparison

使用 wrk,我运行以下命令:

wrk -t10 -c10 -d30s http://localhost:8080/myService --latency -H "Accept-Encoding: gzip"

结果,我得到 Requests/sec: 15000 并且没有错误

我正在尝试用 Gatling 重现相同类型的测试。所以我尝试了以下方法:

scn.inject(
      rampUsersPerSec(1) to 15000 during (30 seconds)
    )

但结果,我得到了错误:

---- 错误------------------------------------ --------------------------

i.n.c.AbstractChannel$AnnotatedSocketException: Can't assign r 573 (42,44%) equested address: localhost/127.0.0.1:8080 i.n.c.AbstractChannel$AnnotatedSocketException: Resource tempo 530 (39,26%) rarily unavailable: localhost/0:0:0:0:0:0:0:1:8080 j.i.IOException: Premature close 247 (18,30%)

从 wrk 开始,我相信我的服务器可以处理 15000 request/s,但使用 Gatling 似乎并非如此。您知道为什么会有这样的差异吗?

免责声明:这里是加特林机的创造者

你在比较苹果和橘子。

使用 wrk,您将打开 10 个连接并在 30 秒内尽可能快地循环。

使用当前的 Gatling 设置,您将产生 225,015 个虚拟用户 ((1 + 15,000) / 2 * 30),每个用户都试图打开自己的连接。

我建议您阅读这篇关于 picking injection profiles that make sense for your use case 的文章。

如果你真的想在这里做与 wrk 相同的事情,你需要将你的场景包装在一个 during(30) 循环中并将你的注入配置文件更改为 atOnceUsers(10)。

您还可以选择使用 shared connection pool

那么,对于这种无逻辑的静态测试,您不能指望任何其他加载测试工具能像 wrk 一样快。

另请注意:

  • Gatling 的 JVM 配置中存在错误,该错误在 Gatling 3.4.0 中已修复,该错误会影响这种极简主义的性能 超高吞吐量测试,参见 issue
  • Gatling 在 JVM 上运行,因此有运行时,因此需要预热,启动吞吐量会低于预热