SonarQube 5.5 gives java.lang.OutofMemoryError : GCOverHeadLimit

1,288 views
Skip to first unread message

Nikhil Mahto

unread,
Aug 15, 2016, 7:41:56 PM8/15/16
to SonarQube
Hi All,

We have SonarQube 5.5, running on a 32GB RAM machine.We are analysing a java project, having around 12k files and 800k LOC, using sonar scanner. The Sonar scanner is executed successfully, however the dashboard widget displaying the project analysis, fives FAILED message with 'java.lang.OutofMemoryError : GCOverHeadLimit' error.

I am setting the below options export SONAR_SCANNER_OPTS="-Xmx2G -XX:MaxPermSize=1G -XX:ReservedCodeCacheSize=512M", before running the SonarScanner.

The error log is as per below:

java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.io.BufferedInputStream.<init>(BufferedInputStream.java:195) ~[na:1.7.0_79]
    at java.io.BufferedInputStream.<init>(BufferedInputStream.java:175) ~[na:1.7.0_79]
    at org.sonar.core.util.Protobuf.readStream(Protobuf.java:129) ~[sonar-core-5.5.jar:na]
    at org.sonar.scanner.protocol.output.ScannerReportReader.readComponentIssues(ScannerReportReader.java:81) ~[sonar-scanner-protocol-5.5.jar:na]
    at org.sonar.server.computation.batch.BatchReportReaderImpl.readComponentIssues(BatchReportReaderImpl.java:94) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.issue.TrackerRawInputFactory$RawLazyInput.loadIssues(TrackerRawInputFactory.java:91) ~[sonar-server-5.5.jar:na]
    at org.sonar.core.issue.tracking.LazyInput.getIssues(LazyInput.java:50) ~[sonar-core-5.5.jar:na]
    at org.sonar.core.issue.tracking.Tracking.<init>(Tracking.java:57) ~[sonar-core-5.5.jar:na]
    at org.sonar.core.issue.tracking.Tracker.track(Tracker.java:37) ~[sonar-core-5.5.jar:na]
    at org.sonar.server.computation.issue.TrackerExecution.track(TrackerExecution.java:41) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.issue.IntegrateIssuesVisitor.processIssues(IntegrateIssuesVisitor.java:67) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.issue.IntegrateIssuesVisitor.visitAny(IntegrateIssuesVisitor.java:59) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.TypeAwareVisitorWrapper.visitAny(TypeAwareVisitorWrapper.java:82) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitNode(VisitorsCrawler.java:107) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitImpl(VisitorsCrawler.java:90) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visit(VisitorsCrawler.java:62) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitChildren(VisitorsCrawler.java:100) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitImpl(VisitorsCrawler.java:87) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visit(VisitorsCrawler.java:62) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitChildren(VisitorsCrawler.java:100) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitImpl(VisitorsCrawler.java:87) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visit(VisitorsCrawler.java:62) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitChildren(VisitorsCrawler.java:100) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visitImpl(VisitorsCrawler.java:87) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.VisitorsCrawler.visit(VisitorsCrawler.java:62) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.step.ExecuteVisitorsStep.execute(ExecuteVisitorsStep.java:50) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.step.ComputationStepExecutor.executeSteps(ComputationStepExecutor.java:64) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.step.ComputationStepExecutor.execute(ComputationStepExecutor.java:52) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.taskprocessor.report.ReportTaskProcessor.process(ReportTaskProcessor.java:75) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.executeTask(CeWorkerCallableImpl.java:81) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.call(CeWorkerCallableImpl.java:56) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.call(CeWorkerCallableImpl.java:35) ~[sonar-server-5.5.jar:na]

Any help is highly appreciated.

Regards,

NM

Nikhil Mahto

unread,
Aug 15, 2016, 8:52:48 PM8/15/16
to SonarQube
Additional Logs

java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2367) ~[na:1.7.0_79]
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) ~[na:1.7.0_79]
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114) ~[na:1.7.0_79]
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415) ~[na:1.7.0_79]
    at java.lang.StringBuilder.append(StringBuilder.java:132) ~[na:1.7.0_79]
    at org.apache.ibatis.scripting.xmltags.DynamicContext.appendSql(DynamicContext.java:65) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.scripting.xmltags.TrimSqlNode$FilteredDynamicContext.applyAll(TrimSqlNode.java:96) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63) ~[mybatis-3.2.7.jar:3.2.7]
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) ~[mybatis-3.2.7.jar:3.2.7]
    at com.sun.proxy.$Proxy42.selectByComponentUuidAndProjectSnapshotIdAndStatusAndMetricIds(Unknown Source) ~[na:na]
    at org.sonar.db.measure.MeasureDao$3.apply(MeasureDao.java:77) ~[sonar-db-5.5.jar:na]
    at org.sonar.db.measure.MeasureDao$3.apply(MeasureDao.java:74) ~[sonar-db-5.5.jar:na]
    at org.sonar.db.DatabaseUtils.executeLargeInputs(DatabaseUtils.java:130) ~[sonar-db-5.5.jar:na]
    at org.sonar.db.measure.MeasureDao.selectByComponentUuidAndProjectSnapshotIdAndMetricIds(MeasureDao.java:74) ~[sonar-db-5.5.jar:na]
    at org.sonar.server.computation.step.ComputeMeasureVariationsStep$VariationMeasuresVisitor.computeMeasuresWithVariations(ComputeMeasureVariationsStep.java:122) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.step.ComputeMeasureVariationsStep$VariationMeasuresVisitor.visitAny(ComputeMeasureVariationsStep.java:115) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visitNode(DepthTraversalTypeAwareCrawler.java:67) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visitImpl(DepthTraversalTypeAwareCrawler.java:51) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visit(DepthTraversalTypeAwareCrawler.java:39) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visitChildren(DepthTraversalTypeAwareCrawler.java:98) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visitImpl(DepthTraversalTypeAwareCrawler.java:54) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visit(DepthTraversalTypeAwareCrawler.java:39) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visitChildren(DepthTraversalTypeAwareCrawler.java:98) ~[sonar-server-5.5.jar:na]
    at org.sonar.server.computation.component.DepthTraversalTypeAwareCrawler.visitImpl(DepthTraversalTypeAwareCrawler.java:54) ~[sonar-server-5.5.jar:na]

Sebastien Lesaint

unread,
Aug 16, 2016, 3:55:11 AM8/16/16
to SonarQube
Hello,

OutOfMemory errors are very hard to investigate based solely on stacktrace. Analyzing an heap dump taken at the time of the OOM (see JVM option HeapDumpOnOutOfMemoryError) would give better lead.

This can hardly be done remotely, so I would rather advise you to update to SQ 5.6.1 rather than stay on 5.5:
* memory usage on the server side has been improved since 5.5
* Web UI and the Compute Engine now run in their own dedicated JVM which means then can't consume the heap of one another anymore

Concerning the SONAR_SCANNER_OPTS option:

This option allows customization of the JVM of the scanner.
Here, you have a OOM on the server side, you must use other options that you must change in sonar.properties on the server side:
* use sonar.web.javaOpts in 5.5
* use sonar.ce.javaOpts in 5.6 (because memory extra consumption is very likely related to the analysis report processing, which occurs in the Compute Engine)

What you should increase is the value of the JVM's Xmx option.

Cheers,

Sébastien LESAINT | SonarSource
Platform Developer

--
You received this message because you are subscribed to the Google Groups "SonarQube" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sonarqube+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sonarqube/3fd6b162-1ff2-4e0f-83f7-0ba9c855e94e%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Nikhil Mahto

unread,
Aug 17, 2016, 2:38:44 AM8/17/16
to SonarQube
Thanks mate, I was able to resolve this issue by changing the sonar.web.javaOpts and sonar.ce.javaOpts variable in sonar.properties. I had to increase the JVM parameters.

Regards,

Nikhil M
To unsubscribe from this group and stop receiving emails from it, send an email to sonarqube+...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages