java.lang.OutOfMemoryError:Maven中的Java堆空间
当我运行maventesting,java.lang.OutOfMemoryError发生。 我谷歌的解决scheme,并试图export MAVEN_OPTS=-Xmx1024m
,但它没有奏效。 任何人都知道这个问题的其他解决scheme,BTW我使用的是Maven 3.0
提前致谢
在运行“mvn test -e”时将错误消息粘贴在这里
testing失败: 警告(junit.framework.TestSuite $ 1) testDefaultPigJob_1(com.snda.dw.pig.impl.DefaultPigJobLocalTest) testDefaultPigJob_2(com.snda.dw.pig.impl.DefaultPigJobLocalTest) testing运行:11,失败:3,错误:0,跳过:0 10/11/01 13:37:18 INFO executionengine.HExecutionEngine:连接到hadoop fi 文件系统:/// [INFO] ----------------------------------------------- ------------------------- [信息]build设失败 [INFO] ----------------------------------------------- ------------------------- [信息]总时间:30.063s [INFO]完成于:Mon Nov 01 13:37:18 PDT 2010 [INFO]最终记忆:3M / 6M [INFO] ----------------------------------------------- ------------------------- [错误]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2。 5:项目dw.pigtesting(默认testing):有testing失败。 [错误] [错误]请参考E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports fo r个人testing结果。 [错误] - > [帮助1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标o rg.apache.maven.plugins:maven-surefire-plugin:2.5:testing(默认testing)项目 dw.pig:有testing失败。 请参考E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports 个别testing结果。 在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 的.java:199) 在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 的.java:148) 在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 的.java:140) 在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje CT(LifecycleModuleBuilder.java:84) 在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje CT(LifecycleModuleBuilder.java:59) 在org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu ILD(LifecycleStarter.java:183) 在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl eStarter.java:161) 在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:314) 在org.apache.maven.DefaultMaven.execute(DefaultMaven.java:151) 在org.apache.maven.cli.MavenCli.execute(MavenCli.java:445) 在org.apache.maven.cli.MavenCli.doMain(MavenCli.java:168) 在org.apache.maven.cli.MavenCli.main(MavenCli.java:132) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。 Java的:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun cher.java:290) 在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav 一:230) 在org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La uncher.java:409) 在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java: 352) 引起:org.apache.maven.plugin.MojoFailureException:有testing失败 。 请参考E:\ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports 个别testing结果。 在org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugi n.java:629) 在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(默认 BuildPluginManager.java:107) 在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor 的.java:195) ...更多 [错误] [错误]使用-X开关重新运行Maven以启用完整的debugging日志logging。 [错误] [错误]有关错误和可能的解决scheme的更多信息,请注意 d以下文章: [错误] [帮助1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
当我运行maventesting,java.lang.OutOfMemoryError发生。 我谷歌的解决scheme,并试图导出MAVEN_OPTS = -Xmx1024m,但它没有奏效。
使用MAVEN_OPTS
设置Xmx
选项确实有效,它configuration了用来启动Maven的JVM。 话虽如此,maven-surefire插件默认分叉一个新的JVM,因此你的MAVEN_OPTS
不会被传递。
要configurationmaven-surefire-plugin使用的JVM的大小,您必须:
- 将
forkMode
改为never
(这不是一个好主意,因为Maven不会被隔离在testing中)〜或者〜 - 使用
argLine
参数(正确的方法):
在后面的情况下,这样的事情:
<configuration> <argLine>-Xmx1024m</argLine> </configuration>
但是我不得不说,在这里我倾向于同意斯蒂芬的观点,你的testing很有可能出了问题,我不确定给予更多的回忆是“解决”(隐藏)你的问题的正确解决scheme。
参考
- Maven 2 Surefire插件
- 在Maven Surefire中的类加载和分叉
对于那些新来的Maven(像我一样),这里是你的pom的构build部分的整个configuration。 干杯。
<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>
问题出在您要求Maven运行的unit testing之一。
因此,摆弄堆大小是错误的方法。 相反,您应该查看导致OOME的unit testing,并试图弄清楚是unit testing还是testing代码的错误。
从查看堆栈跟踪开始。 如果没有,使用-e
选项再次运行mvn ... test
。
我通过两种方式解决了这个问题:
-
在pom.xml中添加这个configuration
<configuration><argLine>-Xmx1024m</argLine></configuration>
-
切换到使用JDK 1.7而不是1.6
为了暂时解决这个问题,我发现以下是最快的方法:
export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"
设置环境variables:
MAVEN_OPTS = “ – Xmx1024m”
不仅堆积内存。 也增加perm的大小来解决这个maven的exception在环境variables中使用这些variables。
variable name: MAVEN_OPTS variable value: -Xmx512m -XX:MaxPermSize=256m
例如:
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"