SonarQube9.2开发者版分析超50万行代码限额问题排查
SonarQube 9.2 开发者版分析任务报LOC超限故障排查
问题现象
- 运行环境:SonarQube 9.2 开发者版
- 故障表现:代码分析任务执行失败,任务返回的错误详情如下:
{"task":{"id":"AYFL9d206YvWba2a7DkU","type":"REPORT","componentId":"AX1SjmUGgaicIN43lF-5","componentKey":"Spotnana-Tech_spotnana","componentName":"spotnana-parent","componentQualifier":"TRK","status":"FAILED","submittedAt":"2022-06-10T04:53:35+0000","submitterLogin":"admin","startedAt":"2022-06-10T04:53:36+0000","executedAt":"2022-06-10T04:54:59+0000","executionTimeMs":83049,"errorMessage":"The last analysis failed because it would have caused your server-wide lines of code total to exceed your 500000 limit.","hasScannerContext":true,"branch":"master","branchType":"BRANCH","errorType":"LICENSING_LOC","warningCount":1,"warnings":[]}}
- 矛盾点:错误提示本次分析会导致全局代码行数超出500000行的许可证限额,但后台公开统计面板显示当前全局已统计代码行数仅为230K,二者数值存在明显偏差。
故障根因
这个矛盾本质是两个数值的统计口径完全不一致,不存在计数错误:
- 许可证校验的LOC(代码行数)计数,会覆盖实例内所有被存储的代码快照:包括所有项目的所有功能分支、所有历史拉取请求分析结果、所有已逻辑删除但未物理清理的项目/分支快照,是全量存储的代码量总和。
- 后台首页公开显示的230K统计值,仅统计所有活跃项目默认主分支的最新快照代码量,非主分支、PR、已删除项目的代码量不会计入这个展示值。
常见触发场景有三类: - 历史残留数据占额:之前测试创建的临时项目、已合并删除的功能分支、废弃的历史PR分析结果没有被物理清理,持续占用许可证配额,但不会出现在公开统计面板里。
- 扫描范围配置错误:本次扫描没有排除构建产物目录、第三方依赖目录、自动生成代码目录,单次上报的代码量就超过270K,叠加现有230K主分支代码量直接触发限额。
- 系统计数任务异常:负责重算许可证LOC配额的后台任务挂起,没有同步清理后的配额数据,导致实际剩余配额和系统记录值不一致。
排查步骤
- 管理员账号登录后进入配置 > 许可证页面,拉到页面底部的LOC占用明细板块,这里会展示所有计入许可证配额的项目、分支占比,可直接定位到占用隐藏配额的对象。
- 检查本次扫描的范围配置:扫描时添加启动参数
-Dsonar.scanner.dumpToFile=./scan_detail.properties,导出本次扫描上报的所有文件清单,统计实际待上报的代码行数,确认是否存在非业务代码被误扫的情况。 - 进入配置 > 系统 > 调度任务页面,检查「历史快照清理」「许可证LOC计数重算」两个系统任务的状态,确认是否存在任务长时间未执行、执行失败的情况。
解决方法
- 若为扫描范围错误:在项目扫描配置中添加排除规则,将
node_modules、target、build、自动生成代码目录加入扫描排除列表,重新发起扫描即可。 - 若为历史残留数据占额:手动删除不需要保留的旧分支、废弃测试项目,再进入系统信息 > 系统任务页面,手动触发
Compute License LOC Count任务重算全量配额,计数更新后即可释放被占用的额度。 - 若为系统任务异常:手动重启SonarQube服务,重新触发清理和计数任务,待配额数据同步完成后再发起分析。
- 若确实是活跃项目业务代码量增长达到限额:可选择升级许可证LOC额度,或定期归档下线不再迭代的老旧项目,释放配额给活跃业务使用。
内容的提问来源于stack exchange,提问作者tuk
相关产品推荐
相关产品推荐

