【问题标题】:Running Spring Boot "context loads" test in maven causes OutOfMemoryError在 maven 中运行 Spring Boot“上下文加载”测试会导致 OutOfMemoryError
【发布时间】:2018-08-23 02:58:01
【问题描述】:

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

mvn -P IntegrationTests clean test

在上下文初始化期间,事情超出了我的控制,应用程序“吃掉”内存(堆大小迅速增长到 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 中运行 mvn test 时)- 它影响主 java 进程,但不影响其子进程
  3. 在命令行中添加-Drun.jvmArguments="..."

但问题仍然存在。

请帮助我在测试中对抗OutOfMemoryError

【问题讨论】:

    标签: maven spring-boot out-of-memory maven-surefire-plugin permgen


    【解决方案1】:

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

    • 传递给生成的万无一失的进程(这应该可以解决您的问题)
    • 仅影响测试应用程序构建
    • 在团队中的开发人员之间共享
    • 可为每个模块独立配置
    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-10
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2022-12-22
      • 1970-01-01
      相关资源
      最近更新 更多