karate-gatling:如何解决 java 堆 space OutOfMemoryError?
karate-gatling: how to resolve java heap space OutOfMemoryError?
目前我正在尝试 运行 我们的功能测试(大约 300 个请求)与 10 个用户并行使用 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.nextTick(LightArrayRevolverScheduler.scala:269)
at akka.actor.LightArrayRevolverScheduler$$anon.run(LightArrayRevolverScheduler.scala:235)
at java.lang.Thread.run(Thread.java:748)
我尝试以不同的方式将堆 space 增加到 10 GB (-Xmx10g
):
- 通过环境 属性
MAVEN_OPTS=-Xmx10g
- 通过本地项目maven选项
.mvn/jvm.config
- 根据建议通过
maven-surefire-plugin
配置here
尽管如您在 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
但是在每次 gatling-plugin
执行期间仍然抛出 OutOfMemoryError
。
分析每个堆转储时 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...
如何减少堆 space 的使用并防止 OutOfMemoryError
?
有人可以分享一些想法和经验吗?
经过一些调查我终于注意到,堆转储总是显示 1GB。这意味着 gatling-plugin
没有使用增加的堆 space。
通过向插件添加以下 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>
你可以试试这个
<configuration>
<meminitial>1024m</meminitial>
<maxmem>4096m</maxmem>
</configuration>
目前我正在尝试 运行 我们的功能测试(大约 300 个请求)与 10 个用户并行使用 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.nextTick(LightArrayRevolverScheduler.scala:269)
at akka.actor.LightArrayRevolverScheduler$$anon.run(LightArrayRevolverScheduler.scala:235)
at java.lang.Thread.run(Thread.java:748)
我尝试以不同的方式将堆 space 增加到 10 GB (-Xmx10g
):
- 通过环境 属性
MAVEN_OPTS=-Xmx10g
- 通过本地项目maven选项
.mvn/jvm.config
- 根据建议通过
maven-surefire-plugin
配置here
尽管如您在 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
但是在每次 gatling-plugin
执行期间仍然抛出 OutOfMemoryError
。
分析每个堆转储时 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...
如何减少堆 space 的使用并防止 OutOfMemoryError
?
有人可以分享一些想法和经验吗?
经过一些调查我终于注意到,堆转储总是显示 1GB。这意味着 gatling-plugin
没有使用增加的堆 space。
通过向插件添加以下 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>
你可以试试这个
<configuration>
<meminitial>1024m</meminitial>
<maxmem>4096m</maxmem>
</configuration>