Sonar 分析出现内存不足错误,我应该增加 Ant 或 Sonar 服务器的 JVM 堆空间吗?

Posted

技术标签:

【中文标题】Sonar 分析出现内存不足错误,我应该增加 Ant 或 Sonar 服务器的 JVM 堆空间吗?【英文标题】:Sonar analysis gives out of memory error, should I increase JVM heap space of Ant or Sonar server? 【发布时间】:2012-12-24 13:30:20 【问题描述】:

我在 Sonar 中分析一个大型项目并得到以下错误:

[sonar:sonar] 03:55:39.511 INFO  p.PhasesTimeProfiler - Execute decorators...

BUILD FAILED
[...]
[...] java.lang.OutOfMemoryError: Java heap space
at org.sonar.batch.index.MeasurePersister.model(MeasurePersister.java:127)
at org.sonar.batch.index.MeasurePersister.getMeasuresToSave(MeasurePersister.java:117)
at org.sonar.batch.index.MeasurePersister.dump(MeasurePersister.java:70)
at org.sonar.batch.index.DefaultPersistenceManager.dump(DefaultPersistenceManager.java:63)
at org.sonar.batch.phases.Phases.execute(Phases.java:95)
at org.sonar.batch.bootstrap.ProjectModule.doStart(ProjectModule.java:139)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.bootstrap.BatchModule.analyze(BatchModule.java:131)
at org.sonar.batch.bootstrap.BatchModule.doStart(BatchModule.java:121)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.bootstrap.BootstrapModule.doStart(BootstrapModule.java:121)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.Batch.execute(Batch.java:104)
at org.sonar.ant.Launcher.execute(Launcher.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.sonar.ant.SonarTask.delegateExecution(SonarTask.java:244)
at org.sonar.ant.SonarTask.execute(SonarTask.java:193)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)

我应该增加正在运行的 Sonar 服务器的 Java 堆空间,还是增加执行 Sonar 作业的 Ant 目标?

【问题讨论】:

我正在使用 Jenkins 执行 Ant 目标(声纳) 哦,好吧,这就是我遗漏的可能性...... 【参考方案1】:

从堆栈跟踪中可以看出,Ant 启动了 Sonar 分析,因此您应该增加 Ant 运行所在的 VM 的堆空间。

这是一个非常相似的问题顺便说一句:How to increase Sonar Java heap space

用于命令行 Ant 使用

引用 Mark O'Connor 对另一个问题的回答:

Sonar ANT 任务作为 ANT 的一部分执行,因此您需要使用标准 ANT 环境参数设置 JVM 堆。例如:

导出 ANT_OPTS=-Xmx256m

备注:

这适用于 Linux,对于 Windows,请使用 set 命令 这仅适用于堆空间。对于Permgen,使用-XX:MaxPermSize=<desired amount>

这是一个更相似的问题:Build Failed java.lang.OutOfMemoryError: Java heap space

对于 Eclipse IDE

引用文章http://soenkerohde.com/2008/06/change-eclipse-ant-settings-when-you-run-out-of-memory/

在 Eclipse 中打开菜单:运行->外部工具->打开外部工具对话框… 在左侧选择要更改的构建脚本 选择右侧的JRE标签 将以下内容设置为 VM 参数:-Xms768m -Xmx1024m -XX:MaxPermSize=512m

对于 IntelliJ 理念

这个论坛帖子很有用:ANT build java heap space

引用答案:

请确保您在正确的位置增加了堆。您需要在 IDEA 的 Ant 工具窗口中点击“属性”按钮并在此处编辑 “最大堆大小 (Mb)” 字段。

另外,来自 IntelliJ Idea 页面:Increasing Memory Heap

引用文章:

构建过程的内存堆独立于 IntelliJ IDEA 内存堆,在构建过程完成后释放。

增加内存堆: 打开 构建文件属性 对话框。 在 最大堆大小 字段中,输入所需的内存量。

用于 Jenkins 持续集成和 Ant 构建

这个问题很有用:How to use the Java Options in jenkins ant build tool to set ANT_OPTS

引用答案:

将 JAVA OPTIONS 设置为 -Xmx512m -XX:MaxPermSize=256m 仅不带 ANT_OPTS=

对于 Maven 构建,这篇文章很有用:How to increase maven heapspace in hudson builds

    导航到您的 hudson 工作, 点击配置, 向下滚动到构建部分,然后 点击高级按钮。 将其输入 MAVEN_OPTS: -Xmx512m -XX:MaxPermSize=128m

【讨论】:

mac 是什么..?

以上是关于Sonar 分析出现内存不足错误,我应该增加 Ant 或 Sonar 服务器的 JVM 堆空间吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 VisualVm 分析堆转储时出现内存不足错误

Eclipse 堆空间(内存不足错误)

SQL 错误 (1038): 排序内存不足,请考虑增加服务器排序缓冲区

Spark:广播对象时内存不足

ConnectionQueueStatsProvider 出现内存不足错误

由于堆大小增加,android中的内存不足错误