SonarQube面板显示分析待处理超2天,Jenkins构建成功但分析挂起求助
排查SonarQube分析任务一直显示Pending的解决方案
我之前也碰到过类似的SonarQube任务Pending的问题,结合你提供的环境信息:
- SonarQube Server Version: 5.6.7 (64-Bit)
- 操作系统:Ubuntu-16.04 LTS
- MYSQL Database Version: 5.7.21
- 当前数据库大小:16-GB
可以从以下几个方向逐步排查:
1. 先查看Background Tasks的具体错误详情
进入对应项目→Administration→Background Tasks,找到那些Pending的任务,点击任务条目里的「失败详情」(如果有的话)。这里通常会直接给出任务卡壳的原因——比如数据库连接超时、权限不足、分析报告过大导致处理失败等,是最直接的排查入口。
2. 检查SonarQube的核心日志
SonarQube的日志是排查问题的关键,重点看这两个日志文件:
- ce.log:Compute Engine的日志,专门负责处理分析任务,任务Pending大概率和这个模块有关。可以用命令实时查看:
tail -f /opt/sonarqube/logs/ce.log - web.log:Web服务的日志,能帮你排查SonarQube和外部(比如Jenkins、数据库)的交互问题。
如果日志里出现OutOfMemoryError,那就是内存不足导致的,需要调整JVM参数;如果有数据库连接报错,就转向数据库配置排查。
3. 数据库相关配置排查
你的数据库已经16GB,大概率是有不少历史数据,建议检查这些点:
- 调整MySQL的
max_allowed_packet参数:SonarQube处理大项目的分析报告时,需要足够大的数据包传输,默认的MySQL配置可能不够。打开/etc/mysql/my.cnf(或my.cnf.d下的配置文件),添加或修改:
保存后重启MySQL服务:max_allowed_packet = 128Msudo systemctl restart mysql。 - 检查数据库连接权限:确认SonarQube配置文件
conf/sonar.properties里的数据库URL、用户名、密码都正确,且该用户有足够的数据库操作权限(比如增删改查、创建表)。 - 磁盘空间检查:虽然数据库是16GB,但要确保数据库所在的磁盘还有剩余空间,避免因为磁盘满了导致任务无法写入数据。
4. 调整SonarQube的JVM内存配置
SonarQube 5.6.7的默认内存配置可能不足以处理大量分析任务,尤其是Compute Engine模块:
- 打开
conf/sonar.properties,找到Compute Engine的JVM参数配置:
根据你的服务器内存情况调整,比如服务器有8GB内存的话,sonar.ce.javaOpts=-Xmx2G -Xms1G -XX:+HeapDumpOnOutOfMemoryError-Xmx可以设为3G。 - 同时检查Web服务的内存配置
sonar.web.javaOpts,确保也有足够的内存支撑。
修改后重启SonarQube服务生效。
5. 检查Jenkins与SonarQube的兼容性
- 确认Jenkins上的SonarQube Scanner插件版本和SonarQube 5.6.7兼容,新版本插件可能不再支持旧版SonarQube,建议使用和SonarQube 5.x匹配的插件版本(比如SonarQube Scanner 2.8左右)。
- 检查Jenkins的SonarQube全局配置,确保服务器地址、Token(如果开启了的话)都正确;再检查Jenkins构建任务里的SonarQube扫描命令,有没有传错参数(比如项目key错误、分支参数配置问题)。
6. 重启SonarQube服务清理任务队列
如果之前有大量任务堆积导致Compute Engine卡死,可以尝试重启SonarQube服务来重置队列:
sudo systemctl stop sonarqube sudo systemctl start sonarqube
重启后再回到Background Tasks页面,看看任务是否开始正常处理。
内容的提问来源于stack exchange,提问作者user4948798
相关产品推荐
相关产品推荐

