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

贝洛亚尔

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

mvn clean test-compile gatling:test -Dkarate.env=test

.mvn/jvm.config在项目文件夹中具有以下本地maven选项:

-d64 -Xmx4g -Xms1g -XshowSettings:vm -Djava.awt.headless=true

在并行处理一些大响应的某个时刻,加特林过程中止了:

[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)

我尝试以-Xmx10g不同的方式将堆空间增加到10 GB():

  1. 通过环境财产 MAVEN_OPTS=-Xmx10g
  2. 通过本地项目专家选项 .mvn/jvm.config
  3. 通过此处maven-surefire-plugin建议的配置

正如您在maven流程开始时看到的那样,尽管为maven流程分配了10GB:

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

OutOfMemoryError在每次gatling-plugin执行期间仍会抛出

分析每个堆转储时,eclipse memory analyzer总是显示相同的结果:

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-plugin

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

<jvmArgs>
    <jvmArg>-Xmx4g</jvmArg>
</jvmArgs>

因此,通过以下gatling-plugin配置,该错误不再出现:

         <plugin>
            <groupId>io.gatling</groupId>
            <artifactId>gatling-maven-plugin</artifactId>
            <version>${gatling.plugin.version}</version>
            <configuration>
                <simulationsFolder>src/test/java</simulationsFolder>
                <includes>
                    <include>performance.test.workflow.WorkflowSimulation</include>
                </includes>
                <compilerJvmArgs>
                    <compilerJvmArg>-Xmx512m</compilerJvmArg>
                </compilerJvmArgs>
                <jvmArgs>
                    <jvmArg>-Xmx4g</jvmArg>
                </jvmArgs>
            </configuration>
        </plugin>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

空手道加特林:如何模拟空手道功能,除了那些用@ignore标记的场景

空手道加特林:Callonce无法运行

空手道加特林:设置本地地址

空手道加特林报告汇总

如何在加特林模拟中运行多个空手道特征文件?

空手道加特林:无法在空手道功能中使用对象字段

加特林(Gatling)模拟完成后如何运行空手道特征文件

空手道+加特林:exitHereIfFailed不起作用

加特林空手道性能测试是开源的吗?

空手道加特林:未选取对功能文件的更改

空手道加特林:未记录一个请求

空手道加特林:将uriPatterns列表添加到karateProtocol()

空手道-加特林-失败的请求未显示为KO

空手道加特林:报表中带有查询参数的请求未汇总

如何解决OutOfMemoryError:Java堆空间

如何使用Gradle构建系统运行空手道和加特林

空手道加特林在使用加特林的油门功能时会引发异常,并且不会生成任何报告

空手道加特林:即使其中一个失败,如何强制并行执行所有现有功能文件?

空手道加特林(Garate-Gatling)是否与Gatling Jenkins Plugin一起使用?

加特林空手道:来自馈线的数据在特征中有未定义的值

我们是否可以在“空手道加特林报告”的“静态”部分中自定义和分组测试方案?

我们可以使用空手道加特林在同一个程序包中运行多个功能文件吗

如何解析“ |” 在空手道的例子中

如何解决java.lang.OutOfMemoryError:Java堆空间而不增加堆内存大小

加特林:如何解决“找不到隐含参数”?

Eclipse:Java堆空间,如何解决?

空手道状况如何使用

空手道如何解析字符串化的json响应

空手道与命名空间不匹配 xml