Why I'm getting the Gatling error: "[gatling-http-1-14] WARN io.netty.channel.nio.NioEventLoop" and Gatling is killing a VU after any error

Why I'm getting the Gatling error: "[gatling-http-1-14] WARN io.netty.channel.nio.NioEventLoop" and Gatling is killing a VU after any error

我在尝试 运行 我已经完成的 Gatling 模拟时遇到了一些问题。基本上,我有两个问题:

  1. 当任何API在Gatling模拟中测试returns 400或任何其他错误代码(不是check.status的一部分)时,Gatling会杀死虚拟用户,而不是重新启动场景并重新使用该虚拟用户,所以每个错误,我都会失去一个虚拟用户,因为我的测试计划只有 16 个用户 30 分钟,我在前几分钟完成了测试而没有完成每次我尝试 运行 测试时都会发生这种情况,这很烦人,因为我一直在关注所有文档,但我不知道我的代码有什么问题。用户和坡道的模拟配置如下代码所示:
    val scnCreation = scenario("My Scenario").during(conf.getDuration("test.duration")) {
        exec(Pattern.methodToExecute)
    }

    setUp(scnCreation.inject(
        rampUsers(conf.getInt("test.vu")).during(conf.getDuration("test.ramp"))
    )
  1. 我在测试 运行ning 时收到此错误,但我的资源并没有被淹没(CPU 大约是 ~30%,内存大约是 ~50 %):

    [gatling-http-1-13] WARN io.netty.channel.nio.NioEventLoop - Selector.select() returned prematurely 512 times in a row;

关于如何增加 Gatling 引擎的“限制”以及如何修复 Gatling 在错误后杀死一个虚拟用户的不良行为有什么想法吗?

  1. 您关于错误时虚拟用户会退出循环并终止的说法很可能是错误的,除非您使用 some exit condition 以这种方式实施了测试(编辑:您做到了)。

如果您不想让用户退出循环,请不要使用 exitHereIfFailed。用 exitBlockOnFail 代替循环内容。查看文档。

那么,无论如何,Gatling 不会“回收”虚拟用户。您正在使用 rampUsers,它定义了一个开放的工作负载模型,您可以在其中定义用户的到达率。

  1. 这是一个 NIO/OS 错误。至少将您的 Java 升级到 Java 8 的最新版本,如果您 运行 在 Linux 上,请检查您的内核有多旧并且很可能考虑升级。

此外,我怀疑您使用的是旧版本的 Gatling,因为现代版本不在 Linux 上使用 Java NIO。您应该升级(目前最新的是 3.5.1)