SonarQube启动后自动关闭问题咨询(含无报错及异常场景)
问题
我碰到了两个SonarQube的异常问题:
- SonarQube运行一段时间后会突然异常关闭
- 没有任何明显异常提示,但启动几秒后就自动关闭
我执行的操作和截取的日志如下:
root@testmachine:~/sonarqube-7.1/bin/linux-x86-64# ./sonar.sh start Starting SonarQube... Started SonarQube. root@testmachine:~/sonarqube-7.1/bin/linux-x86-64# ./sonar.sh console Running SonarQube... 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 |...
排查与解决方案
针对你遇到的这两种自动关闭的情况,我整理了几个实用的排查步骤,咱们一步步来:
1. 先看完整的核心日志
你现在只贴了日志开头,关键的报错信息基本都在后面。SonarQube的日志都存在sonarqube-7.1/logs目录下,重点看这几个文件:
sonar.log:主运行日志,记录核心服务的状态es.log:内置Elasticsearch的日志(7.x版本的SonarQube严重依赖ES,这是最容易出问题的环节)web.log:Web端服务的相关日志wrapper.log:就是你用console启动时看到的wrapper守护进程日志
可以用命令快速查看最新的错误内容:
tail -n 50 ~/sonarqube-7.1/logs/es.log tail -n 50 ~/sonarqube-7.1/logs/sonar.log
重点找ERROR或者Exception开头的行,这是定位问题的核心线索。
2. 检查系统资源限制
SonarQube(尤其是内置ES)对系统资源有硬性要求,最常见的坑是文件描述符和线程数不够:
- 临时调整当前会话的限制(重启后失效):
ulimit -n 65536 ulimit -u 4096
- 永久调整的话,修改
/etc/security/limits.conf,添加以下内容:
sonarqube soft nofile 65536 sonarqube hard nofile 65536 sonarqube soft nproc 4096 sonarqube hard nproc 4096
⚠️ 注意:SonarQube官方不建议用root用户运行,最好创建专门的sonarqube系统用户,然后给这个用户设置上述资源限制,否则可能还是会触发权限或资源问题。
3. 核对JVM内存配置
SonarQube的JVM参数在sonarqube-7.1/conf/sonar.properties里,重点看sonar.web.javaOpts(Web服务)和sonar.search.javaOpts(ES服务)这两个配置项。7.1版本的推荐配置是:
- Web服务:
-Xmx512m -Xms128m - Elasticsearch:
-Xmx512m -Xms512m(ES的堆内存不能超过物理内存的一半,也绝对不要超过32G,否则会触发GC问题)
如果内存配置太低,或者参数有误,很容易导致启动失败或运行中崩溃。
4. 满足Elasticsearch的特殊系统要求
内置ES有几个必须满足的系统设置,不满足的话直接启动失败:
- 禁用swap分区:执行
swapoff -a,永久禁用的话修改/etc/fstab,注释掉swap相关的行 - 调整虚拟内存限制:执行
sysctl -w vm.max_map_count=262144,永久生效的话把vm.max_map_count=262144添加到/etc/sysctl.conf,然后执行sysctl -p生效 - 确保系统时区一致:ES和SonarQube的时区必须相同,否则会出现索引数据异常,进而导致服务崩溃
5. 检查端口占用情况
SonarQube默认用9000端口,内置ES默认用9001端口(不同版本可能有差异),检查这些端口是否被其他进程占用:
netstat -tulpn | grep 9000 netstat -tulpn | grep 9001
如果端口被占用,要么杀掉对应的进程,要么修改sonar.properties里的端口配置(比如sonar.web.port来修改Web服务端口)。
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

