繁体   English   中英

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

[英]Sonar analysis gives out of memory error, should I increase JVM heap space of Ant or Sonar server?

我正在分析声纳中的一个大型项目,并收到以下错误:

[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启动了Sonar分析,因此您应该增加Ant运行所在的VM的堆空间。

顺便说一句,这是一个非常相似的问题: 如何增加Sonar Java堆空间

对于命令行Ant的用法

引用马克·奥康纳(Mark O'Connor)在另一个问题上的回答:

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

出口ANT_OPTS = -Xmx256m

备注:

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

这是一个更相似的问题: 生成失败的java.lang.OutOfMemoryError:Java堆空间

对于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内存堆,并且在生成过程完成后释放。

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

对于Jenkins持续集成和Ant构建

这个问题很有用: 如何在jenkins ant构建工具中使用Java Options来设置ANT_OPTS

引用答案:

仅在没有ANT_OPTS =的情况下将JAVA OPTIONS设置为-Xmx512m -XX:MaxPermSize = 256m

对于Maven构建 ,本文非常有用: 如何在hudson构建中增加Maven堆空间

  1. 导航至哈德森工作,
  2. 点击配置
  3. 向下滚动到Build部分 ,然后
  4. 单击高级按钮。
  5. 将其输入到MAVEN_OPTS:-Xmx512m -XX:MaxPermSize = 128m

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM