Hudson构建总是出现“java.lang.OutOfMemoryError: Java heap space”错误。

3
我在使用Hudson构建从机时遇到了问题,该从机运行Windows XP系统,内存为4GB,在批处理文件中调用JNLP时,我指定了如下参数:

javaws -J-Xms1280m -J-Xmx1024m http://hudson-master.domain.com:8080/computer/Exige/slave-agent.jnlp

为什么我不能将其设置为超过1GB的值?

系统资源不足。请查看以下堆栈跟踪以获取详细信息。 Java堆空间不足 java.lang.OutOfMemoryError: at com.sun.tools.javac.util.List.prepend(List.java:145) at com.sun.tools.javac.jvm.ClassReader.openArchive(ClassReader.java:1457) at com.sun.tools.javac.jvm.ClassReader.list(ClassReader.java:1742) at com.sun.tools.javac.jvm.ClassReader.listAll(ClassReader.java:1882) at com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:1903) at com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:1538) at com.sun.tools.javac.code.Symbol.complete(Symbol.java:355) at com.sun.tools.javac.comp.Enter.visitTopLevel(Enter.java:256) at com.sun.tools.javac.tree.Tree$TopLevel.accept(Tree.java:382) at com.sun.tools.javac.comp.Enter.classEnter(Enter.java:221) at com.sun.tools.javac.comp.Enter.classEnter(Enter.java:235) at com.sun.tools.javac.comp.Enter.complete(Enter.java:448) at com.sun.tools.javac.comp.Enter.main(Enter.java:433) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:404) at com.sun.tools.javac.main.Main.compile(Main.java:592) at com.sun.tools.javac.main.Main.compile(Main.java:544) at com.sun.tools.javac.Main.compile(Main.java:85) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420) at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141) at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493) at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114) at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:483) at hudson.maven.agent.PluginManagerInterceptor.executeMojo(PluginManagerInterceptor.java:182) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:540) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:519) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:332)
[INFO] ------------------------------------------------------------------------ [INFO] 如需更多信息,请使用-e开关运行Maven [INFO] ------------------------------------------------------------------------ [INFO] 总时间:34秒 [INFO] 完成于:2010年10月08日 星期五 EST 下午5:27:59 [INFO] 最终内存:25M/63M [INFO] ------------------------------------------------------------------------
4个回答

4

Xms 应该比 Xmx 通常要低。


你需要使用-J标志将JVM参数传递给javaws(Java Web Start)。 - dogbane
啊,谢谢您的回复。但是这个值仍然不能大于1GB?我不知道为什么,在Windows XP msinfo32中,这台电脑可用3.24GB。 - Senior Systems Engineer

3

构建过程是否直接由从属代理的JVM执行?如果运行Maven构建(例如),从属代理可以启动外部Maven进程(使用默认Java Xmx)。

因此,您应该指定MAVEN_OPTS参数以确保始终使用自定义Xmx值执行Maven构建。


谢谢你的回复,那么在这种情况下,我应该去HUDSON服务器并更改那个值吗?(哪个文件和在哪里?) - Senior Systems Engineer
谢谢Benoit,Hudson中有一个Maven选项,可以在执行Maven构建时为JVM分配更多内存。在通过Web控制台对服务器进行更改后,现在它可以正常工作而没有错误。 - Senior Systems Engineer

1
请注意:在32位Windows上,Java虚拟机无法分配超过1GB的内存。不要问我为什么,但这是事实(至少对于Sun JVM而言)。如果您需要更多的JVM内存,您需要一个64位系统。当然还需要一个64位的JVM。

1

如果您有主从配置,应在管理Hudson->配置系统->全局属性中指定内存设置。

在主服务器上存在的环境属性也会在从服务器上使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接