【问题标题】:JMeter Maven mojo throws IllegalArgumentException with large JTL fileJMeter Maven mojo 抛出带有大型 JTL 文件的 IllegalArgumentException
【发布时间】:2016-01-18 22:43:12
【问题描述】:

当我在线程组上运行具有大量循环计数(15 个 HTTP 请求上 100 次迭代)的 JMeter 测试时,我从 JMeter 中得到一个巨大的 JTL 文件。

这是我正在使用的 jmeter-maven-plugin (https://github.com/jmeter-maven-plugin/jmeter-maven-plugin) 的问题,它使用 java.util.Scanner 扫描 JTL 文件以查找“false”以查看测试是否失败。因为文件太大(1.8GB)我得到以下失败。

[ERROR] Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter (jmeter-tests) on project performance-tests: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter failed. IllegalArgumentException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter (jmeter-tests) on project performance-tests: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter failed.
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224)
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
       at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
       at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
       at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
       at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
       at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
       at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
       at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:497)
       at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
       at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
       at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
       at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter failed.
       at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
       ... 20 more
Caused by: java.lang.IllegalArgumentException
       at java.nio.CharBuffer.allocate(CharBuffer.java:334)
       at java.util.Scanner.makeSpace(Scanner.java:840)
       at java.util.Scanner.readInput(Scanner.java:795)
       at java.util.Scanner.findWithinHorizon(Scanner.java:1685)
       at com.lazerycode.jmeter.FailureScanner.hasTestFailed(FailureScanner.java:36)
       at com.lazerycode.jmeter.JMeterMojo.parseTestResults(JMeterMojo.java:70)
       at com.lazerycode.jmeter.JMeterMojo.execute(JMeterMojo.java:54)
       at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
       ... 21 more

我正在使用 ignoreResultFailures = true 作为 jmeter-maven-plugin 的参数来解决此问题,从而避免使用 java.util.Scanner 并失败。理想情况下,jmeter-maven-plugin 会处理非常大的 JTL 文件,但 JTL 文件的大小似乎有点极端。

是否有任何 JMeter 设置可以减小 JTL 文件的大小?

【问题讨论】:

    标签: performance testing jmeter jmeter-maven-plugin


    【解决方案1】:

    检查您的测试计划是否启用了“功能测试模式”。

    http://jmeter.apache.org/usermanual/listeners.html

    要保存的信息是可配置的。为了获得最大的信息, 选择“xml”作为格式并指定“功能测试模式” 测试计划元素。如果未选中此框,则默认保存数据 包括时间戳(自午夜以来的毫秒数, 1970 年 1 月 1 日 UTC)、数据类型、线程名称、标签、 响应时间、消息和代码以及成功指示器。如果选中, 将记录所有信息,包括完整的响应数据。

    如果选中,这将导致 JTL 文件很大,因为所有详细的请求和响应数据都已保存。也许您打开它是为了调试您的测试而忘记关闭它?

    【讨论】:

    • 是的,这就是问题所在!谢谢。这将 JTL 减少到 3.5MB!
    【解决方案2】:

    您似乎存储了太多,即导致大量开销的响应数据。所以建议:

    • 使用 CSV 输出格式
    • 不存储响应数据(至少对于成功的采样器而言)

    所以在 user.properties 文件中添加接下来的 2 行(位于 JMeter 安装的 /bin 文件夹下)

    jmeter.save.saveservice.output_format=csv
    jmeter.save.saveservice.response_data=false
    

    您需要重新启动 JMeter 以获取更改。

    示例“好”结果保存配置应如下所示:

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2021-06-09
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多