SonarQube出现java.lang.OutOfMemoryError: GC overhead limit exceeded错误

5

在对我的项目进行Sonar分析时,我遇到了OutOfMemoryException。Jenkins工作显示成功生成了分析报告,但在SonarQube的后台任务中失败并出现以下异常。

2016.08.24 10:55:52 INFO  [o.s.s.c.s.ComputationStepExecutor] Compute comment measures | time=14ms
2016.08.24 10:56:01 INFO  [o.s.s.c.s.ComputationStepExecutor] Copy custom measures | time=9075ms
2016.08.24 10:56:02 INFO  [o.s.s.c.s.ComputationStepExecutor] Compute duplication measures | time=150ms
2016.08.24 10:56:34 ERROR [o.s.s.c.c.ComputeEngineContainerImpl] Cleanup of container failed
java.lang.OutOfMemoryError: GC overhead limit exceeded
2016.08.24 10:56:34 ERROR [o.s.s.c.t.CeWorkerCallableImpl] Failed to execute task AVa6eX7gdswG1hqK_Vvc
java.lang.OutOfMemoryError: Java heap space
2016.08.24 10:56:34 ERROR [o.s.s.c.t.CeWorkerCallableImpl] Executed task | project=iServe | id=AVa6eX7gdswG1hqK_Vvc | time=53577ms

显然它正在耗尽内存,你需要提供一些关于系统有多少内存以及SonarQube在崩溃之前使用了多少内存的信息。 - Magnus
是的,我已经为计算引擎、Web源和Java增加了内存选项,如下所示,但没有起到任何帮助作用。 sonar.ce.javaOpts=-Xmx1024m -Xms128m - Sri
4个回答

3

我使用docker-compose,这个选项对我来说非常完美。

version: "2"

services:
  sonarqube:
    image: sonarqube
    command: -Dsonar.ce.javaOpts=-Xmx4096m

您可以自定义内存大小。


2
我知道这已经很晚了,但可能对某些人有所帮助:
尝试增加MaxPermSize。
我在sonar.properties文件的各自JVM选项(web/ce/Elastic search)下有以下配置:
sonar.web.javaOpts =-Xmx8512m -Xms512m -XX:MaxPermSize=1024m / sonar.ce.javaOpts =-Xmx8512m -Xms512m -XX:MaxPermSize=1024m / sonar.search.javaOpts =-Xmx8512m -Xms512m -XX:MaxPermSize=1024m
对于我来说,实际上使用'1024m'就可以,因为我的项目中有多个模块,并且作为提示,我的服务器也需要相同大小的部署。

2
MaxPermSize在Java 8+中被忽略,实际上会发出警告,这可能会破坏一些构建。https://dev59.com/VWMl5IYBdhLWcg3wgnSl - Novaterata

0
我遇到了类似的问题,并在JVM选项中添加了-Xmx2048m -XX:MaxPermSize=1024m,扫描过程顺利完成。

你把这些选项加在哪里了?是更改配置文件、环境变量还是作为命令行参数来实现的? - Jose B
2
在 JVM 参数中,当您想执行扫描作业过程时。 - Trias Alvyn
2
MaxPermSize在Java 8+中被忽略,实际上会发出警告,这可能会破坏一些构建。https://dev59.com/VWMl5IYBdhLWcg3wgnSl - Novaterata

0

嗨,我用两种不同的方法解决了这个问题,因为我在两种不同的情况下遇到了这个问题。

  1. 情况1:使用Jenkins时:: 我之前也遇到过这个问题,我的Sonar分析在命令行上运行得很好,但在Jenkins上失败了。你可以在sonar-runner.bat文件中将%SONAR_RUNNER_OPTS%替换为-Xms256m -Xmx1024m以增加堆大小。

  2. 情况2:使用命令行时:: 当我使用cmd line运行Sonar分析时,有时也会出现这个错误,在这种情况下,解决方案是创建更多的模块,它会奇迹般地工作,我就不会再遇到Java内存溢出错误了。

  3. 对于Linux系统: 编辑./sonar-scanner-2.6.1/bin/sonar-runner文件并添加

  SONAR_SCANNER_OPTS="$SONAR_SCANNER_OPTS -Xmx2048m -XX:MaxPermSize=1024m"
  **Note:- SONAR_RUNNER_OPTS is deprecated**.

  if [ -n "$SONAR_RUNNER_OPTS" ] ;
then
  echo WARN: '$SONAR_RUNNER_OPTS' is deprecated. Please use '$SONAR_SCANNER_OPTS' instead.

希望能有所帮助 :)

所以我需要将这个添加到 sonar-runner.properties 文件中对吧?而不是 sonar.properties 中? - Sri
相同的问题。 2016.08.24 13:06:21 错误[o.s.s.c.c.ComputeEngineContainerImpl] 容器清理失败 java.lang.OutOfMemoryError:超出GC开销限制 2016.08.24 13:06:21 错误[o.s.s.c.t.CeWorkerCallableImpl] 无法执行任务AVa679P4xqcL0-osYQgv java.lang.OutOfMemoryError:Java堆空间 2016.08.24 13:06:21 错误[o.s.s.c.t.CeWorkerCallableImpl] 执行的任务|项目=ICALL | id=AVa679P4xqcL0-osYQgv |时间=84848ms - Sri
1
你可以右键点击 bin/sonar-runner.bat 并选择编辑,然后在文件中找到 %SONAR_RUNNER_OPTS%,根据你认为合适的设置其值并运行分析。 - Ashutosh Angiras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接