1

在 ant 中运行构建时出现以下错误

buildcallbacks.xml:39: org.sonar.runner.RunnerException: java.lang.OutOfMemoryError: PermGen space

这是声纳在我们的代码上运行的构建部分。

有没有办法让我确切地知道这个错误来自哪里,即它是声纳服务器还是客户端等?

这是我的 buildcallbanks.xml 的第 39 行

<sonar:sonar />

编辑:我已经尝试从 Sonar 中的 wrapper.conf 中增加 permsize,无论我设置多高,我仍然遇到同样的问题。我一定还缺少什么吗?

4

4 回答 4

7

我实际上在你之后回去看看这个 - 它仍然失败。你快到了,但我发现了两件事:

  1. 您使用了 JAVA_OPTS 而不是 ANT_OPTS
  2. CMSClassUnloadingEnabled 仅在您还使用 UseConcMarkSweepGC 时使用。请参见此处:CMSPermGenSweepingEnabled 与 CMSClassUnloadingEnabled

所以现在看起来很有效的设置是:

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

更新: 多年后,由于问题再次发生,我实际上再次访问了这个。您实际上不需要弄乱 GC 设置,只需要弄乱内存即可。正确使用的选项实际上是:

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

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

希望这对其他人有帮助。

于 2012-12-09T13:57:35.740 回答
1

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

于 2012-11-01T11:05:47.610 回答
0

尝试增加 permgen 大小,而不是增加堆大小。你可以这样做

ANT_OPTS=-XX:MaxPermSize=128m

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

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

于 2012-11-01T12:03:23.497 回答
0

增加声纳服务器上的永久空间似乎没有任何效果。

这个问题似乎是由于在 Bamboo 的“组装”阶段运行了太多的 ant 目标造成的。我现在正在运行“清理所有生产”,然后调用 ant sonar 插件 .jar。

似乎应该卸载的类也没有卸载。这已通过以下 JVM 参数修复:-XX:+CMSClassUnloadingEnabled

于 2012-11-13T14:14:49.790 回答