Wrk vs Gatling 基准测试比较

ric*_*ico 1 gatling wrk

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

wrk -t10 -c10 -d30s http://localhost:8080/myService --latency -H "Accept-Encoding: gzip"
Run Code Online (Sandbox Code Playgroud)

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

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

scn.inject(
      rampUsersPerSec(1) to 15000 during (30 seconds)
    )
Run Code Online (Sandbox Code Playgroud)

但结果,我得到了错误:

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

incAbstractChannel$AnnotatedSocketException: 无法分配 r 573 (42,44%) 请求地址:localhost/127.0.0.1:8080 incAbstractChannel$AnnotatedSocketException: Resource tempo 530 (39,26%) 很少不可用:localhost/0:0:0: 0:0:0:0:1:8080 jiIOException: 过早关闭 247 (18,30%)

从 wrk 来看,我相信我的服务器可以处理 15000 个请求/秒,但使用 Gatling 似乎并非如此。你知道为什么会有这样的差异吗?

Sté*_*LLE 5

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

你在比较苹果和橙子。

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

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

我建议您阅读这篇关于选择对您的用例有意义的注入配置文件的文章。

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

您还可以选择使用共享连接池

然后,对于这种无逻辑的静态测试,您不能指望任何其他加载测试工具的速度与 wrk 一样快。

另请注意:

  • Gatling 的 JVM 配置中存在错误,该错误已在 Gatling 3.4.0 中修复,该错误会影响此类极简超高吞吐量测试中的性能,请参阅问题
  • Gatling 运行在 JVM 上,因此有运行时,所以它需要预热,启动吞吐量将低于温暖的