如何为Docker部署的SonarQube调整后台任务Xmx参数?
解决Docker中SonarQube 7.1大型项目分析GC Limit Exceeded问题
我之前处理过一模一样的场景——升级SonarQube到7.1后,Docker容器里跑大型项目分析就报GC limit exceeded,重启偶尔能蒙混一次但根本不解决问题。本质就是后台计算任务(Compute Engine,CE)的JVM堆内存不够用,给你两种适配你现有docker-compose.yml的配置方案:
方案1:通过Docker环境变量直接配置(推荐)
Docker版的SonarQube支持通过环境变量直接传递CE服务的JVM参数,不需要修改配置文件。直接在你的docker-compose.yml的sonar服务的environment块里添加SONAR_CE_JVM_OPTS参数,指定更大的堆内存:
修改后的sonar服务配置片段:
sonar: image: sonarqube:alpine container_name: sonar restart: always ports: - "9000:9000" - "9092:9092" environment: SONARQUBE_JDBC_USERNAME: <SONAR_USER> SONARQUBE_JDBC_PASSWORD: <SONAR_PASSWORD> SONARQUBE_JDBC_URL: jdbc:postgresql://postgres/sonar # 新增:设置CE服务的JVM堆内存,这里设为4G,可根据服务器内存调整 SONAR_CE_JVM_OPTS: "-Xmx4G -Xms2G" volumes: - /opt/docker-sonar/conf:/opt/sonarqube/conf - /opt/docker-sonar/data:/opt/sonarqube/data - /opt/docker-sonar/extensions:/opt/sonarqube/extensions - /opt/docker-sonar/bundled-plugins:/opt/sonarqube/lib/bundled-plugins
注意:
-Xmx是最大堆内存,-Xms是初始堆内存,建议根据你的服务器物理内存调整——比如服务器有8G内存,给CE分配4G就很合适,别超过物理内存的50%,避免和其他服务(比如PostgreSQL)抢资源。
修改完后,重启容器生效:
docker-compose down && docker-compose up -d
方案2:通过挂载的配置文件修改
因为你已经把SonarQube的conf目录挂载到了宿主机的/opt/docker-sonar/conf,可以直接修改宿主机上的配置文件:
- 编辑宿主机上的
/opt/docker-sonar/conf/sonar.properties文件 - 找到
sonar.ce.javaOpts配置项(如果没有就新增),设置堆内存参数:
sonar.ce.javaOpts=-Xmx4G -Xms2G
- 保存后重启SonarQube容器:
docker-compose restart sonar
额外注意
- 如果你的SonarQube Web服务也出现内存不足的情况,可以用同样的逻辑设置
SONAR_WEB_JVM_OPTS环境变量,或者修改sonar.web.javaOpts配置项 - 调整内存后,建议观察几次大型项目的分析任务,确认GC问题不再出现,如果还是有问题可以再适当加大
-Xmx的值
内容的提问来源于stack exchange,提问作者tgr
相关产品推荐
相关产品推荐

