简体   繁体   English

java.lang.OutOfMemoryError:Maven 中的 Java 堆空间

[英]java.lang.OutOfMemoryError: Java heap space in Maven

When I run maven test, java.lang.OutOfMemoryError happens.当我运行 maven 测试时,会发生java.lang.OutOfMemoryError I googled it for solutions and have tried to export MAVEN_OPTS=-Xmx1024m , but it did not work.我在export MAVEN_OPTS=-Xmx1024m搜索了解决方案,并尝试export MAVEN_OPTS=-Xmx1024m ,但没有奏效。 Anyone know other solutions for this problem?有人知道这个问题的其他解决方案吗? I am using maven 3.0我正在使用 Maven 3.0

Paste the error message here when run mvn test -e运行mvn test -e时在此处粘贴错误消息

Failed tests:
  warning(junit.framework.TestSuite$1)
  testDefaultPigJob_1(com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2(com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Tests run: 11, Failures: 3, Errors: 0, Skipped: 0

10/11/01 13:37:18 INFO executionengine.HExecutionEngine: Connecting to hadoop fi
le system at: file:///
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.063s
[INFO] Finished at: Mon Nov 01 13:37:18 PDT 2010
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.
5:test (default-test) on project dw.pig: There are test failures.
[ERROR]
[ERROR] Please refer to E:\Code\Java\workspace\dw.pig\target\surefire-reports fo
r the individual test results.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.apache.maven.plugins:maven-surefire-plugin:2.5:test (default-test) on project
 dw.pig: There are test failures.

Please refer to E:\Code\Java\workspace\dw.pig\target\surefire-reports for the in
dividual test results.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:199)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:148)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:140)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl
eStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:314)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:151)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:445)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:168)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:132)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun
cher.java:290)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav
a:230)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La
uncher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:
352)
Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures
.

Please refer to E:\Code\Java\workspace\dw.pig\target\surefire-reports for the in
dividual test results.
        at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugi
n.java:629)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default
BuildPluginManager.java:107)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:195)
        ... 19 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

When I run maven test, java.lang.OutOfMemoryError happens.当我运行 maven 测试时,会发生 java.lang.OutOfMemoryError。 I google it for solutions and have tried to export MAVEN_OPTS=-Xmx1024m, but it did not work.我在谷歌上搜索解决方案并尝试导出 MAVEN_OPTS=-Xmx1024m,但没有奏效。

Setting the Xmx options using MAVEN_OPTS does work, it does configure the JVM used to start Maven.使用MAVEN_OPTS设置Xmx选项确实有效,它确实配置了用于启动 Maven 的 JVM。 That being said, the maven-surefire-plugin forks a new JVM by default, and your MAVEN_OPTS are thus not passed. MAVEN_OPTS虽如此,默认情况下 maven-surefire-plugin 会派生一个新的 JVM,因此不会通过您的MAVEN_OPTS

To configure the sizing of the JVM used by the maven-surefire-plugin, you would either have to:要配置 maven-surefire-plugin 使用的 JVM 的大小,您必须:

  • change the forkMode to never (which is be a not so good idea because Maven won't be isolated from the test) ~or~forkMode更改为never (这不是一个好主意,因为 Maven 不会与测试隔离)~或~
  • use the argLine parameter (the right way):使用argLine参数(正确的方式):

In the later case, something like this:在后一种情况下,是这样的:

<configuration>
  <argLine>-Xmx1024m</argLine>
</configuration>

But I have to say that I tend to agree with Stephen here, there is very likely something wrong with one of your test and I'm not sure that giving more memory is the right solution to "solve" (hide?) your problem.我不得不说,我倾向于同意斯蒂芬的观点,您的一项测试很可能有问题,我不确定提供更多内存是“解决”(隐藏?)您的问题的正确解决方案。

References参考文献

For those new to Maven (like me) here is the whole config that goes in the build section of your pom.对于 Maven 新手(像我一样),这里是 pom 的构建部分中的整个配置。 Cheers.干杯。

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <argLine>-Xmx1024m</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>

The chances are that the problem is in one of the unit tests that you've asked Maven to run.问题很可能出在您要求 Maven 运行的单元测试之一中。

As such, fiddling with the heap size is the wrong approach.因此,摆弄堆大小是错误的方法。 Instead, you should be looking at the unit test that has caused the OOME, and trying to figure out if it is the fault of the unit test or the code that it is testing.相反,您应该查看导致 OOME 的单元测试,并试图找出是单元测试的错误还是它正在测试的代码的错误。

Start by looking at the stack trace.首先查看堆栈跟踪。 If there isn't one, run mvn ... test again with the -e option.如果没有,请使用-e选项再次运行mvn ... test

为了暂时解决这个问题,我发现以下是最快的方法:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"

I have solved this problem on my side by 2 ways:我已经通过两种方式解决了这个问题:

  1. Adding this configuration in pom.xml在 pom.xml 中添加这个配置

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Switch to used JDK 1.7 instead of 1.6切换到使用的 JDK 1.7 而不是 1.6

In order to resolve java.lang.OutOfMemoryError: Java heap space in Maven, try to configure below configuration in pom为了解决java.lang.OutOfMemoryError: Java heap space in Maven,尝试在pom中配置以下配置

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${maven-surefire-plugin.version}</version>
     <configuration>
        <verbose>true</verbose>
        <fork>true</fork>
        <argLine>-XX:MaxPermSize=500M</argLine>
    </configuration>
</plugin>

As mentioned in the top answers, as Surefire is creating a new JVM to run your tests, you want to pass that -Xmx1024m to the new JVM instead of the JVM where you start mvn test .正如上面的回答中提到的,由于 Surefire 正在创建一个新的 JVM 来运行您的测试,您希望将-Xmx1024m传递给新的 JVM,而不是您启动mvn test的 JVM。

Just wanted to add that you can do that in your command like只是想补充一点,您可以在命令中执行此操作,例如

mvn test -DargLine="-Xmx1024m"

It has equivalent effect with adding the JVM option to the Surefire plugin's configuration in pom.xml:它与在 pom.xml 中的 Surefire 插件的配置中添加 JVM 选项具有等效的效果:

<configuration>
  <argLine>-Xmx1024m</argLine>
</configuration>

Not only heap memory.不仅是堆内存。 also increase perm size to resolve that exception in maven use these variables in environment variable.还增加 perm 大小以解决 maven 中的异常在环境变量中使用这些变量。

variable name: MAVEN_OPTS
variable value: -Xmx512m -XX:MaxPermSize=256m

Example :示例:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM