Sonar java.lang.OutOfMemoryError:PermGen空间

时间:2012-11-01 11:01:54

标签: java heap sonarqube bamboo permgen

在ant

中运行构建时出现以下错误
buildcallbacks.xml:39: org.sonar.runner.RunnerException: java.lang.OutOfMemoryError: PermGen space

这是构建中声纳运行代码的部分。

有没有办法让我知道这个错误的确切位置,即声纳服务器或客户端等?

这是我的buildcallbanks.xml的第39行

<sonar:sonar />
编辑:我已经尝试从Sonar中的wrapper.conf增加permsize,无论我设置多高,我仍然会遇到同样的问题。我还得错过什么?

4 个答案:

答案 0 :(得分:7)

我实际上回过头来看看你之后 - 它仍然失败了。 你快到了,但我发现了两件事:

  1. 您使用过JAVA_OPTS而不是ANT_OPTS
  2. 只有在使用UseConcMarkSweepGC时才使用CMSClassUnloadingEnabled。见这里:CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled
  3. 所以现在似乎正在进行处理的设置是:

    ANT_OPTS="-Xmx1024m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=512m"
    

    <强>更新 多年以后,我再次重新访问了这个问题,因为问题再次发生。你实际上并不需要弄乱GC设置,只需要内存。事实上正确的选择是:

    ANT_OPTS="-Xmx2G -XX:MaxPermSize=1G"
    

    显然,您可以调整内存值以适合您的机器。

    希望这有助于其他人。

答案 1 :(得分:1)

此错误不是由任何特定代码行引起的,因此尝试找到它是没有意义的。您只需重新配置ant使用的Java运行时,以便增加PermGen空间的限制。 This wiki page记录了如何实现这一目标。基本上,您设置ANT_OPTS环境变量。

答案 2 :(得分:0)

尝试增加permgen大小,而不是增加堆大小。您可以使用

执行此操作
ANT_OPTS=-XX:MaxPermSize=128m

默认大小为64 MB,因此此设置应使可用的最大内存加倍。

PermGen内存用于运行JVM时不经常更改的内容,如类定义。

答案 3 :(得分:0)

增加声纳服务器上的permspace似乎没有任何影响。

这个问题似乎是由于在Bamboo的'assembly'阶段运行了太多的ant目标引起的。我现在正在运行'清理所有生产',然后调用ant声纳插件.jar。

似乎这些课程本来应该没有被卸载。使用以下JVM参数修复此问题:-XX:+ CMSClassUnloadingEnabled