【问题标题】:Mockito, jacoco and surefire causes out of memoryMockito、jacoco 和 surefire 导致内存不足
【发布时间】:2015-03-02 10:07:36
【问题描述】:

我正在使用 mockito 1.8.3、jacoco 0.72 和 maven 3.0.5 surefire 插件(2.12.4)来执行单元测试并生成覆盖率报告,它工作正常。

随着添加的测试越来越多,它开始无法正常工作。我在测试执行过程中不断遇到内存不足的错误,并且找不到找出问题的方法。

我有大约 1800 多个使用 mockito 作为模拟工具的测试用例。如果我在测试阶段之前使用“org.jacoco:jacoco-maven-plugin:prepare-agent”在 maven 测试期间不运行 jacoco,那么它工作正常,但只要我添加 jacoco 代理,我就会遇到 PermGen full 的 OOO 问题。

我已经通过修改 MAVEN_OPTS(这不应该工作,因为 surefire 会派生一个新进程)和 pom 中的 surefire argline 参数将 PermGen 添加到 2GB,但这并没有太大帮助。

当OOO发生时,我尝试通过向surefire插件添加参数来获取核心转储,但从未在任何文件夹中看到转储文件。我怀疑我的 JVM 设置不适用于 surefire 插件,但不确定出了什么问题。任何人都可以帮我一个忙吗?谢谢。

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire.version}</version>
                <inherited>true</inherited>
                <configuration>
                    <properties>
                        <property>
                            <name>argLine</name>                                    <value>-server -ea -XX:-UseSplitVerifier -XX:MaxPermSize=2g -Xmx3g -XX:+HeapDumpOnOutOfMemoryError </value>
                        </property>
                        <property>
                            <name>forkMode</name>
                            <value>once</value>
                        </property>
                        <property>
                            <name>reportFormat</name>
                            <value>plain</value>
                        </property>
                        <property>
                            <name>skipTests</name>
                            <value>${maven.test.skip}</value>
                        </property>
                    </properties>
                </configuration>
            </plugin>

【问题讨论】:

  • 仍有问题,请帮忙?

标签: maven mockito jacoco surefire


【解决方案1】:

您需要为maven-surefire-plugin 设置内存,如下所示:

<plugins>
[...]
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <forkCount>3</forkCount>
        <reuseForks>true</reuseForks>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
        <systemPropertyVariables>
            <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
        </systemPropertyVariables>
    </configuration>
  </plugin>
[...]
</plugins>

【讨论】:

  • 谢谢,它正在工作。不知道为什么我使用的“属性”格式不起作用。
  • 我仍然遇到问题,你能帮帮我吗?
【解决方案2】:

如果你配置了 jacoco 和 maven failsafe plugin,那么你也需要将内存参数传递给那个:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-failsafe-plugin</artifactId>
   <version>2.14.1</version>
   <configuration>
      <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
   </configuration>
</plugin>

【讨论】:

  • Vadim,还有问题,你能帮帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多