问题
I am analysing a large project in Sonar and get the following error:
[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)
Should I increase the java heap space of the running Sonar server, or the Ant target executing the Sonar job?
回答1:
As you can see from the stack trace, the Ant starts the Sonar analysis, so you should increase the heap space for the VM the Ant runs in.
This is a very similar question BTW: How to increase Sonar Java heap space
For command line Ant usage
Quote from the answer by Mark O'Connor on the other question:
The Sonar ANT task executes as part of ANT so you need to set the JVM heap using the standard ANT environment parameter. For example:
export ANT_OPTS=-Xmx256m
Remarks:
- this is for Linux, for Windows, use the
set
command - this is strictly for the heap space. for
Permgen
, use-XX:MaxPermSize=<desired amount>
This is an even more similar question: Build Failed java.lang.OutOfMemoryError: Java heap space
For Eclipse IDE
Quote from the article http://soenkerohde.com/2008/06/change-eclipse-ant-settings-when-you-run-out-of-memory/
- In Eclipse open menu: Run->External Tools->Open External Tools Dialog…
- Select the build script you want to change on the left
- Select the JRE tab on the right
- Set the following as VM arguments: -Xms768m -Xmx1024m -XX:MaxPermSize=512m
For IntelliJ Idea
This forum thread is useful: ANT build java heap space
Quote from the answers:
Please make sure that you increased heap in a correct place. You need to click 'Properties' button in IDEA's Ant tool window and edit 'Maximum heap size (Mb)' field there.
Also, from the IntelliJ Idea page: Increasing Memory Heap
Quote from the article:
The memory heap of the build process is independent of IntelliJ IDEA memory heap, and is released after the build process is complete.
To increase a memory heap: Open the Build File Properties dialog box. In the Maximum heap size field, type the required amount of memory.
For Jenkins Continuous Integration and Ant build
This question is useful : How to use the Java Options in jenkins ant build tool to set ANT_OPTS
Quote from the answer:
Set the JAVA OPTIONS as -Xmx512m -XX:MaxPermSize=256m only without the ANT_OPTS=
For Maven builds, this article is of use: How to increase maven heapspace in hudson builds
- Navigate to your hudson job,
- click Configure,
- scroll down to the Build section, and
- click the Advanced button.
- Enter this into MAVEN_OPTS: -Xmx512m -XX:MaxPermSize=128m
来源:https://stackoverflow.com/questions/14253218/sonar-analysis-gives-out-of-memory-error-should-i-increase-jvm-heap-space-of-an