我正在分析声纳中的一个大型项目,并收到以下错误:
[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目标?
对于命令行Ant的用法
引用马克·奥康纳(Mark O’Connor)在另一个问题上的回答:
Sonar ANT任务作为ANT的一部分执行,因此您需要使用标准ANT环境参数设置JVM堆。例如: 出口ANT_OPTS = -Xmx256m
Sonar ANT任务作为ANT的一部分执行,因此您需要使用标准ANT环境参数设置JVM堆。例如:
出口ANT_OPTS = -Xmx256m
备注:
set
Permgen
-XX:MaxPermSize=<desired amount>
对于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 Idea
这个论坛线程很有用:ANT构建Java堆空间
引用答案:
请确保您在正确的位置增加了堆。您需要在 IDEA的Ant工具窗口中 单击“属性”按钮,然后在此处编辑 “最大堆大小(Mb)” 字段。
另外,从IntelliJ Idea页面:增加内存堆
从文章引用:
生成过程的内存堆独立于IntelliJ IDEA内存堆,并且在生成过程完成后释放。 要增加内存堆:打开“ 构建文件属性” 对话框。在 最大堆大小 字段中,键入所需的内存量。
生成过程的内存堆独立于IntelliJ IDEA内存堆,并且在生成过程完成后释放。
要增加内存堆:打开“ 构建文件属性” 对话框。在 最大堆大小 字段中,键入所需的内存量。
对于Jenkins持续集成和Ant构建
仅在没有ANT_OPTS =的情况下将JAVA OPTIONS设置为-Xmx512m -XX:MaxPermSize = 256m
对于 Maven构建 ,本文很有用:如何在hudson构建中增加Maven堆空间
导航至哈德森工作, 点击 配置 , 向下滚动到 Build部分 ,然后 单击 高级 按钮。 将其输入到 MAVEN_OPTS:-Xmx512m -XX:MaxPermSize = 128m