performance-testing - 为什么我收到 Gatling 错误:“[gatling-http-1-14] WARN io.netty.channel.nio.NioEventLoop”并且 Gatling 在任何错误后都会杀死 VU
问题描述
我在尝试运行我已经完成的加特林模拟时遇到了几个问题。基本上,我有两个问题:
- 当 Gatling 模拟中的任何被测 API 返回 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"))
)
我在测试运行时收到此错误,但我的资源并没有不堪重负(CPU 约为 ~30%,内存约为 ~50%):
[gatling-http-1-13] WARN io.netty.channel.nio.NioEventLoop - Selector.select() returned prematurely 512 times in a row;
关于如何增加 Gatling 引擎的“限制”以及如何修复 Gatling 在错误后杀死一个虚拟用户的不良行为的任何想法?
解决方案
- 您关于错误时虚拟用户退出循环并终止的声明很可能是错误的,除非您已经通过某种退出条件以这种方式实现了测试(编辑:您这样做了)。
如果您不希望您的用户退出循环,请不要使用exitHereIfFailed
. exitBlockOnFail
用代替包装你的循环内容。看看文档。
然后,无论如何,加特林都不会“回收”虚拟用户。您正在使用rampUsers
它定义一个开放的工作负载模型,您可以在其中定义用户的到达率。
- 这是一个 NIO/OS 错误。至少将您的 Java 升级到 Java 8 的最新版本,如果您在 Linux 上运行,请检查您的内核的年龄,并且很可能考虑升级。
另外,我怀疑您使用的是旧版本的 Gatling,因为现代版本不在 Linux 上使用 Java NIO。您应该升级(截至目前最新的是 3.5.1)
推荐阅读
- r - R中相关随机游走的边界限制
- ruby-on-rails - 如何在 Macbook 上测试 Windows Outlook App 的电子邮件设计?
- java - IllegalAnnotationExceptions:XmlIDREF 属性引用了没有 XmlID 属性的类型“java.lang.String”
- javascript - 在页面加载之前运行模块脚本?
- reactjs - 使用 Jest 模拟 React 组件时出现 TypeScript 错误 TS2339
- python - 全新安装后 conda update --all 失败 (Anaconda3-2020.11-Linux-x86_64)
- mongodb - 为什么 MongoDB 的 db.getRoles 返回空?
- c++ - 如何计算元素的执行排列并在c ++中显示Quicksort的排序过程?
- c - XC16 编译器局部变量赋值不起作用
- c++ - c++:强制将 std::string 强制转换为 string_view 而不是模板