1

我在从 hudson 运行时遇到 java 堆空间错误,我将我的设置MAVEN_OPTS如下,任何人都可以让我知道这个问题的解决方案是什么。

-Xmx4096m -XX:PermSize=3000m -XX:MaxPermSize=4096m
 
    [信息] --------------------------------------------- -------------------------
    [错误] 致命错误
    [信息] --------------------------------------------- -------------------------
    [INFO] Java 堆空间
    [信息] --------------------------------------------- -------------------------
    [INFO] Trace`在此处输入代码`
    java.lang.OutOfMemoryError:Java 堆空间
        在 java.util.BitSet.initWords(BitSet.java:144)
        在 java.util.BitSet.(BitSet.java:139)
        在 com.cenqua.clover.InMemPerTestCoverage.(InMemPerTestCoverage.java:66)
        在 com.cenqua.clover.CloverDatabase.mergePerTestCoverage(CloverDatabase.java:494)
        在 com.cenqua.clover.CloverDatabase.merge(CloverDatabase.java:437)
        在 com.cenqua.clover.CloverMerge.mainImpl(CloverMerge.java:36)
        在 com.atlassian.maven.plugin.clover.CloverAggregateMojo.mergeCloverDatabases(CloverAggregateMojo.java:260)
        在 com.atlassian.maven.plugin.clover.CloverAggregateMojo.execute(CloverAggregateMojo.java:79)
        在 org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
        在 hudson.maven.agent.PluginManagerInterceptor.executeMojo(PluginManagerInterceptor.java:182)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:284)
        在 org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        在 org.apache.maven.lifecycle.LifecycleExecutorInterceptor.execute(LifecycleExecutorInterceptor.java:65)
        在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        在 org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        在 java.lang.reflect.Method.invoke(Method.java:597)
        在 org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        在 org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        在 hudson.maven.agent.Main.launch(Main.java:185)
        在 hudson.maven.MavenBuilder.call(MavenBuilder.java:165)
        在 hudson.maven.MavenModuleSetBuild$Builder.call(MavenModuleSetBuild.java:1005)
        在 hudson.maven.MavenModuleSetBuild$Builder.call(MavenModuleSetBuild.java:936)
        在 hudson.remoting.UserRequest.perform(UserRequest.java:118)
        在 hudson.remoting.UserRequest.perform(UserRequest.java:48)
    [信息] --------------------------------------------- -------------------------
    [INFO] 总时间:87 分 35 秒
    [INFO] 完成于:2011 年 7 月 21 日星期四 12:20:13 PDT
    [INFO] 最终内存:112M/3123M
    [信息] --------------------------------------------- -------------------------
    频道已停止
    正在发布 Clover 覆盖率报告...
4

1 回答 1

0

根据我的经验,-XX:MaxPermSize 不应该等于 -Xmx。另一方面,它是-Xmx 内的一个子集永久内存。

我发现 50% 可能就足够了。无论如何,我们需要监控 GC 以确保它是否配置正确。

e.g.
-Xmx512M -XX:MaxPermSize=256M 

我希望这可能会有所帮助。

问候,

查理·Ch。

于 2011-07-22T00:54:07.197 回答