You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下SonarQube 7.1安装失败求助

解决SonarQube 7.1启动失败:JVM无法创建(DCEVM与GC冲突)

看到你启动SonarQube时遇到了JVM启动失败的问题,先抓一下日志里的核心错误:

Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Must use the serial GC in the DCEVM

问题根源

这个错误指向很明确:你当前系统使用的是DCEVM(动态代码演化虚拟机),但SonarQube自带的Elasticsearch启动时指定了CMS垃圾收集器(-XX:+UseConcMarkSweepGC),而DCEVM强制要求使用Serial GC,两者冲突直接导致JVM启动失败。

具体解决步骤

  • 切换到标准JDK 1.8
    SonarQube 7.1只兼容标准的Oracle JDK 1.8或OpenJDK 1.8,绝对不能用DCEVM版本。先确认你有标准JDK的安装路径,比如C:\Program Files\Java\jdk1.8.0_200这类不带DCEVM标识的版本。

  • 临时指定JAVA_HOME启动
    在启动SonarQube的命令行窗口中,先手动设置JAVA_HOME指向标准JDK,再启动服务:

    set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_200
    cd E:\sonarqube-7.1 (1)\sonarqube-7.1\bin\windows-x86-64
    startsonar.bat
    
  • 验证JDK版本
    运行java -version命令,确保输出里没有"DCEVM"相关字样,正常的JDK输出应该类似:

    java version "1.8.0_200"
    Java(TM) SE Runtime Environment (build 1.8.0_200-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.200-b09, mixed mode)
    
  • 长期修改环境变量(可选)
    如果不想每次启动都手动设置,可以修改系统的JAVA_HOME环境变量,直接指向标准JDK 1.8,之后双击startsonar.bat就能正常启动了。

补充说明

日志里出现的Log4j相关警告(Log4j2 could not find a logging implementation)是Elasticsearch启动失败引发的连锁问题,只要解决了JDK的冲突,这个警告会自动消失。

完整错误日志参考:

E:\sonarqube-7.1 (1)\sonarqube-7.1\bin\windows-x86-64>startsonar.bat
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2018.05.21 13:20:36 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory E:\sonarqube-7.1 (1)\sonarqube-7.1\temp
jvm 1 | 2018.05.21 13:20:36 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
jvm 1 | 2018.05.21 13:20:36 INFO app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [E:\sonarqube-7.1 (1)\sonarqube-7.1\elasticsearch]: C:\Program Files (x86)\Java\jdk1.8.0_20\jre\bin\java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -Delasticsearch -Des.path.home=E:\sonarqube-7.1 (1)\sonarqube-7.1\elasticsearch -cp lib/* org.elasticsearch.bootstrap.Elasticsearch -Epath.conf=E:\sonarqube-7.1 (1)\sonarqube-7.1\temp\conf\es
jvm 1 | 2018.05.21 13:20:36 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
jvm 1 | Error: Could not create the Java Virtual Machine.
jvm 1 | Error: A fatal exception has occurred. Program will exit.
jvm 1 | Must use the serial GC in the DCEVM
jvm 1 | 2018.05.21 13:20:36 WARN app[][o.s.a.p.AbstractProcessMonitor] Process exited with exit value [es]: 1
jvm 1 | 2018.05.21 13:20:36 INFO app[][o.s.a.SchedulerImpl] Process [es] is stopped
jvm 1 | 2018.05.21 13:20:36 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
jvm 1 | FATAL StatusLogger Interrupted before Log4j Providers could be loaded.
jvm 1 | java.lang.InterruptedException
jvm 1 | at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
jvm 1 | at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
jvm 1 | at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:121)
jvm 1 | at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:108)
jvm 1 | at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:89)
jvm 1 | at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:54)
jvm 1 | at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:105)
jvm 1 | at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:72)
jvm 1 | at org.elasticsearch.common.component.AbstractComponent.<init>(AbstractComponent.java:37)
jvm 1 | at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:97)
jvm 1 | at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:101)
jvm 1 | at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:126)
jvm 1 | at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:254)
jvm 1 | at org.sonar.application.process.EsProcessMonitor$MinimalTransportClient.<init>(EsProcessMonitor.java:109)
jvm 1 | at org.sonar.application.process.EsProcessMonitor.buildTransportClient(EsProcessMonitor.java:175)
jvm 1 | at org.sonar.application.process.EsProcessMonitor.getTransportClient(EsProcessMonitor.java:160)
jvm 1 | at org.sonar.application.process.EsProcessMonitor.checkStatus(EsProcessMonitor.java:134)
jvm 1 | at org.sonar.application.process.EsProcessMonitor.checkOperational(EsProcessMonitor.java:93)
jvm 1 | at org.sonar.application.process.EsProcessMonitor.isOperational(EsProcessMonitor.java:78)
jvm 1 | at org.sonar.application.process.SQProcess.refreshState(SQProcess.java:161)
jvm 1 | at org.sonar.application.process.SQProcess$EventWatcher.run(SQProcess.java:220)
jvm 1 | ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
wrapper | <-- Wrapper Stopped

内容的提问来源于stack exchange,提问作者rakesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:30:59