运行 Spring Boot "context loads" maven 中的测试导致 OutOfMemoryError

Running Spring Boot "context loads" test in maven causes OutOfMemoryError

我有一个多模块 Maven 项目,其中两个模块是 Spring 启动应用程序。他们每个人都有一个简单的测试,即 Spring 应用程序上下文成功加载(我的测试与 this one 非常相似)。我 运行 在项目根目录中使用以下命令进行测试:

mvn -P IntegrationTests clean test

在上下文初始化期间,事情超出了我的控制,应用程序 "eats" 内存(堆大小迅速增长到 4 GB),然后上下文无法启动 java.lang.OutOfMemoryError: PermGen space 错误 (是的,我 运行 它在 Java 7).

在测试期间监控任务管理器我注意到 Maven 产生了两个与 surefire plugin 有关的新进程。我不知道它来自哪里,因为我没有在我的 pom.xml.

中添加 surefire 插件

以前在某处遇到同样的错误时,我指定了 VM 选项(例如 -Xmx256m -Xms128m -XX:MaxPermSize=256m -XX:PermSize=128m),问题就解决了。

这次我尝试了

  1. 设置MAVEN_OPTS环境变量
  2. 设置 VM 选项(在 IntelliJ IDEA 中 运行ning mvn test 时)- 它影响主 java 进程但不影响其子进程
  3. 在命令行添加-Drun.jvmArguments="..."

但问题依然存在。

请帮助我在测试中对抗OutOfMemoryError

将 Surefire 插件显式添加到 module-specific pom.xml 并在那里配置 VM 选项。我喜欢这个解决方案,因为这样 VM 选项是

  • 传递给生成的 surefire 进程(应该可以解决您的问题)
  • 仅影响测试应用程序构建
  • 在您团队中的开发者之间共享
  • 可为每个模块独立配置
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx256m -Xms128m -XX:MaxPermSize=256m -XX:PermSize=128m</argLine>
            </configuration>
        </plugin>

        <!-- your other plugins go here -->
    </plugins>
</build>