I am getting OutOfMemoryException while performing sonar analysis on my project. Below is the stack trace:
14:55:55.433 DEBUG - Release semaphore on project : org.sonar.api.resources.Project@5a7b5cb8[id=1,key=myProj_web,qualifier=TRK], with key batch-myProj_web 14:55:55.711 DEBUG - To prevent a memory leak, the JDBC Driver [com.mysql.jdbc.Driver] has been forcibly deregistered INFO: ------------------------------------------------------------------------ INFO: EXECUTION FAILURE INFO: ------------------------------------------------------------------------ Total time: 12:48.979s Final Memory: 33M/910M INFO: ------------------------------------------------------------------------ ERROR: Error during Sonar runner execution org.sonar.runner.impl.RunnerException: Unable to execute Sonar at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91) at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) at java.security.AccessController.doPrivileged(Native Method) at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) at org.sonar.runner.api.Runner.execute(Runner.java:100) at org.sonar.runner.Main.executeTask(Main.java:70) at org.sonar.runner.Main.execute(Main.java:59) at org.sonar.runner.Main.main(Main.java:53) Caused by: org.sonar.api.utils.SonarException: Can not execute Findbugs at org.sonar.plugins.findbugs.FindbugsExecutor.execute(FindbugsExecutor.java:154) at org.sonar.plugins.findbugs.FindbugsSensor.analyse(FindbugsSensor.java:59) at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79) at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70) at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:131) at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:178) at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:199) at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:194) at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:187) at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:56) at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:44) at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:82) at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) at org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:175) at org.sonar.batch.bootstrap.BootstrapContainer.doAfterStart(BootstrapContainer.java:163) at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) at org.sonar.batch.bootstrapper.Batch.startBatch(Batch.java:92) at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:74) at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) ... 9 more Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232) at java.util.concurrent.FutureTask.get(FutureTask.java:91) at org.sonar.plugins.findbugs.FindbugsExecutor.execute(FindbugsExecutor.java:146) ... 38 more Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded at edu.umd.cs.findbugs.util.Strings.escapeXml(Strings.java:167) at edu.umd.cs.findbugs.xml.XMLAttributeList.getQuotedAttributeValue(XMLAttributeList.java:132) at edu.umd.cs.findbugs.xml.XMLAttributeList.toString(XMLAttributeList.java:111) at edu.umd.cs.findbugs.xml.OutputStreamXMLOutput.openTag(OutputStreamXMLOutput.java:112) at edu.umd.cs.findbugs.SourceLineAnnotation.writeXML(SourceLineAnnotation.java:887) at edu.umd.cs.findbugs.ClassAnnotation.writeXML(ClassAnnotation.java:192) at edu.umd.cs.findbugs.BugInstance.writeXML(BugInstance.java:2292) at edu.umd.cs.findbugs.SortedBugCollection.writeXML(SortedBugCollection.java:576) at edu.umd.cs.findbugs.SortedBugCollection.writeXML(SortedBugCollection.java:497) at edu.umd.cs.findbugs.XMLBugReporter.finish(XMLBugReporter.java:46) at edu.umd.cs.findbugs.DelegatingBugReporter.finish(DelegatingBugReporter.java:81) at edu.umd.cs.findbugs.DelegatingBugReporter.finish(DelegatingBugReporter.java:81) at edu.umd.cs.findbugs.DelegatingBugReporter.finish(DelegatingBugReporter.java:81) at edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1256) at edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:282) at org.sonar.plugins.findbugs.FindbugsExecutor$FindbugsTask.call(FindbugsExecutor.java:201) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
I tried increasing memory but the problem still exists. I have used following options while running sonar: set SONAR_RUNNER_OPTS=-Xmx1024m -XX:MaxPermSize=512m
From the root of the Eclipse folder open the eclipse. ini and change the default maximum heap size of -Xmx256m to -Xmx1024m on the last line. NOTE: If there is a lot of memory available on the machine, you can also try using -Xmx2048m as the maximum heap size.
1 Answer. The GC Overhead Limit Exceeded error is an indication of a resource exhaustion i.e. memory. The JVM throws this error if the Java process spends more than 98% of its time doing GC and only less than 2% of the heap is recovered in each execution.
OK, after doing some more research I got it right. I had to do some setup, though.
sonar.skipPackageDesign=true
set SONAR_RUNNER_OPTS=-Xmx1536m -XX:MaxPermSize=512m
sonar.skipDesign=true
To read more, please refer this post
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With