Linux下启动SonarQube wrapper遭遇JVM错误求助
我之前也碰到过类似的JVM启动问题,结合你用的SonarQube 6.7.2版本(这个版本确实比较老,不过先聚焦解决当前问题),可以从这几个方向排查和解决:
SonarQube 6.7.2明确要求使用Java 8(不管是OpenJDK还是Oracle JDK都可以,但绝对不能用Java 9及以上版本)。你先跑个命令确认当前系统的Java版本:
java -version
如果版本不对,赶紧安装Java 8并设置为默认:
- Debian/Ubuntu系:
sudo apt-get install openjdk-8-jdk - RHEL/CentOS系:
sudo yum install java-1.8.0-openjdk - 设置默认版本:
sudo update-alternatives --config java,选中Java 8的选项即可
你执行的wrapper脚本和build.sh都可能存在权限或路径问题:
- 先确认wrapper文件存在且有执行权限:
ls -l /opt/sonarqube-6.7.2/bin/linux-x86-64/wrapper
如果没有执行权限,添加权限:chmod +x /opt/sonarqube-6.7.2/bin/linux-x86-64/wrapper
- 同样检查build.sh的权限:
chmod +x /home/some_user/some_storage/sonar-scanning-examples/sonarqube-scanner-build-wrapper-linux/build.sh
另外要确保你输入的两个文件路径完全正确,别打错字符或者漏了目录。
JVM启动错误的细节一般都会写在SonarQube的日志里,你去这两个日志文件里找线索:
- SonarQube主日志:
/opt/sonarqube-6.7.2/logs/sonar.log - Wrapper专属日志:
/opt/sonarqube-6.7.2/logs/wrapper.log
日志里会明确告诉你是内存不足、配置错误还是其他问题,比如OutOfMemoryError就说明内存不够,ClassNotFoundException可能是JDK版本不对。
如果日志显示内存不够,就修改SonarQube的配置文件/opt/sonarqube-6.7.2/conf/sonar.properties,找到这两个参数调整内存大小:
# 调整Web服务的JVM内存 sonar.web.javaOpts=-Xmx1024m -Xms256m -XX:+HeapDumpOnOutOfMemoryError # 调整Elasticsearch的JVM内存 sonar.search.javaOpts=-Xmx1024m -Xms1024m -XX:+HeapDumpOnOutOfMemoryError
根据你的系统内存情况来改,比如系统有4G内存的话,给每个分配1G就够了,改完重启SonarQube再试。
有时候问题不一定出在SonarQube的wrapper上,你可以先跳过wrapper,直接运行build.sh看看项目能不能正常编译:
cd /home/some_user/some_storage/sonar-scanning-examples/sonarqube-scanner-build-wrapper-linux && ./build.sh
如果build.sh本身就报错,那得先解决项目构建的问题,比如安装gcc、make这些编译工具,等项目能正常构建了再用wrapper跑Sonar扫描。
内容的提问来源于stack exchange,提问作者Ugnius Malūkas

