Karate 空手道加特林:如何解决java堆空间OutOfMemoryError?

Karate 空手道加特林:如何解决java堆空间OutOfMemoryError?,karate,gatling-plugin,Karate,Gatling Plugin,目前,我正在尝试使用gatling插件10个用户并行运行我们的功能测试(大约300个请求) mvn clean test-compile gatling:test -Dkarate.env=test 使用项目文件夹中的以下.mvn/jvm.config本地maven选项: -d64 -Xmx4g -Xms1g -XshowSettings:vm -Djava.awt.headless=true 在并行处理某个大响应时,gatling进程在某个时刻被中止: [ERROR] Failed to

目前,我正在尝试使用
gatling插件
10个用户并行运行我们的功能测试(大约300个请求)

mvn clean test-compile gatling:test -Dkarate.env=test
使用项目文件夹中的以下
.mvn/jvm.config
本地maven选项:

-d64 -Xmx4g -Xms1g -XshowSettings:vm -Djava.awt.headless=true
在并行处理某个大响应时,gatling进程在某个时刻被中止:

[ERROR] Failed to execute goal io.gatling:gatling-maven-plugin:3.0.2:test (default-cli) on project np.rest-testing: Gatling failed.: Process exited with an error: -1 (Exit value: -1) -> [Help 1]
使用以下堆栈跟踪:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid25960.hprof ...
Heap dump file created [1611661680 bytes in 18.184 secs]
Uncaught error from thread [GatlingSystem-scheduler-1]: Java heap space, shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[GatlingSystem]
java.lang.OutOfMemoryError: Java heap space
        at akka.actor.LightArrayRevolverScheduler$$anon$3.nextTick(LightArrayRevolverScheduler.scala:269)
        at akka.actor.LightArrayRevolverScheduler$$anon$3.run(LightArrayRevolverScheduler.scala:235)
        at java.lang.Thread.run(Thread.java:748)
我曾尝试以不同的方式将堆空间增加到10GB(
-Xmx10g
):

  • 通过环境属性
    MAVEN_OPTS=-Xmx10g
  • 通过本地项目maven选项
    .mvn/jvm.config
  • 按照建议,通过
    maven surefire插件
    配置
  • 虽然maven流程分配了10GB,但正如您在maven流程开始时所看到的:

    VM settings:
        Min. Heap Size: 1.00G
        Max. Heap Size: 10.00G
        Ergonomics Machine Class: client
        Using VM: Java HotSpot(TM) 64-Bit Server VM
    
    但是每次执行
    gatling插件时仍会抛出
    OutOfMemoryError

    当分析每个堆转储时,eclipse内存分析器总是显示相同的结果:

    84 instances of "com.intuit.karate.core.StepResult", loaded by "sun.misc.Launcher$AppClassLoader @ 0xc0000000" occupy 954 286 864 (90,44 %) bytes. 
    
    Biggest instances:
    •com.intuit.karate.core.StepResult @ 0xfb93ced8 - 87 239 976 (8,27 %) bytes... 
    
    
    如何减少堆空间使用并防止
    OutOfMemoryError

    有人能分享一些想法和经验吗?

    经过一些调查,我终于注意到,堆转储总是显示1GB。这意味着增加的堆空间不会被
    gatling插件使用

    通过向插件添加以下jvm参数,即使使用4GB,问题也得到了解决:

    <jvmArgs>
        <jvmArg>-Xmx4g</jvmArg>
    </jvmArgs>
    
    你可以试试这个

    <configuration>
     <meminitial>1024m</meminitial>
     <maxmem>4096m</maxmem>
    </configuration>
    
    
    1024米
    4096米
    
    <configuration>
     <meminitial>1024m</meminitial>
     <maxmem>4096m</maxmem>
    </configuration>