java.lang.OutOfMemoryError: Java heap space in Maven
当我运行maven test时,会发生java.lang.OutOfMemoryError。 我谷歌它的解决方案,并试图
任何人都知道这个问题的其他解决方案,BTW我正在使用maven 3.0
提前致谢
运行"mvn test -e"时粘贴错误信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 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. I google it for solutions and have tried to export MAVEN_OPTS=-Xmx1024m, but it did not work.
使用
要配置maven-surefire-plugin使用的JVM的大小,您可能必须:
-
将
forkMode 更改为never (这是一个不太好的主意,因为Maven不会与测试隔离)?或? -
使用
argLine 参数(正确的方法):
在后一种情况下,这样的事情:
1 2 3 | <configuration> -Xmx1024m</argLine> </configuration> |
但我必须说我倾向于同意斯蒂芬在这里,你的测试之一很可能出现问题,而且我不确定提供更多内存是解决问题(隐藏?)的正确解决方案。
参考
- Maven 2 Surefire插件
- Maven Surefire中的类加载和分叉
对于那些刚接触Maven的人(像我一样),这是整个配置,它位于你的pom的构建部分。干杯。
1 2 3 4 5 6 7 8 9 10 11 12 | <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> maven-surefire-plugin</artifactId> <version>2.19</version> <configuration> -Xmx1024m</argLine> </configuration> </plugin> </plugins> </build> |
可能是问题出在你要求Maven运行的单元测试中。
因此,摆弄堆大小是错误的方法。相反,您应该查看导致OOME的单元测试,并尝试确定它是单元测试的错误还是它正在测试的代码。
首先查看堆栈跟踪。如果没有,请使用
为了暂时解决这个问题,我发现以下是最快的方法:
1 | export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m" |
我通过两种方式解决了这个问题:
在pom.xml中添加此配置
1 | <configuration>-Xmx1024m</argLine></configuration> |
切换到使用JDK 1.7而不是1.6
为了解决java.lang.OutOfMemoryError:Maven中的Java堆空间,尝试在pom中配置以下配置
1 2 3 4 5 6 7 8 9 10 | <plugin> <groupId>org.apache.maven.plugins</groupId> maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> <configuration> <verbose>true</verbose> <fork>true</fork> -XX:MaxPermSize=500M</argLine> </configuration> </plugin> |
不仅堆内存。还要增加perm大小来解决maven中的异常,在环境变量中使用这些变量。
1 2 | variable name: MAVEN_OPTS variable value: -Xmx512m -XX:MaxPermSize=256m |
示例:
1 | export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m" |