首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空手道:如何解析java堆空间OutOfMemoryError?

空手道:如何解析java堆空间OutOfMemoryError?
EN

Stack Overflow用户
提问于 2019-12-18 12:35:12
回答 2查看 4.1K关注 0票数 5

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

代码语言:javascript
复制
mvn clean test-compile gatling:test -Dkarate.env=test

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

代码语言:javascript
复制
-d64 -Xmx4g -Xms1g -XshowSettings:vm -Djava.awt.headless=true

在并行处理某些大响应时,gatling进程在某一时刻被中止:

代码语言:javascript
复制
[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]

具有以下堆栈跟踪:

代码语言:javascript
复制
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)

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

通过环境属性.mvn/jvm.config

  • via

  • 通过本地项目maven选项maven-surefire-plugin配置建议的here

尽管为maven进程分配了10 at,但您可以在maven进程开始时看到:

代码语言:javascript
复制
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总是表示相同的结果:

代码语言:javascript
复制
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?有人能分享一些想法和经验吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-18 18:42:40

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

通过在插件中添加以下jvm参数,即使在4GB的情况下也可以解决这个问题:

代码语言:javascript
复制
<jvmArgs>
    <jvmArg>-Xmx4g</jvmArg>
</jvmArgs>

因此,使用以下gatling-plugin配置,错误不再出现:

代码语言:javascript
复制
         <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>
票数 10
EN

Stack Overflow用户

发布于 2021-03-25 12:29:18

你可以试试这个

代码语言:javascript
复制
<configuration>
 <meminitial>1024m</meminitial>
 <maxmem>4096m</maxmem>
</configuration>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59392180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档