SonarQube 6.7.1扫描时出现java.lang.IllegalStateException异常求助
解决SonarQube CE线程重复加载ThreadLocalSettings的异常问题
嗨,我之前在团队里遇到过SonarQube 6.7.x版本类似的ThreadLocalSettings异常问题,结合你用的这套环境(Scanner 3.0.3.778、SonarQube 6.7.1、MySQL 5.7),给你几个实用的排查和修复方向:
- 调整CE线程池配置:SonarQube的Compute Engine(CE)线程复用如果配置不合理,会导致ThreadLocal变量没及时清理。打开SonarQube的配置文件
sonar.properties,找到sonar.ce.workerCount参数,建议设置为服务器CPU核心数的1-2倍(比如4核CPU设为2-4),避免线程过载。修改后重启SonarQube服务再测试。 - 清理Scanner本地缓存:本地Scanner的缓存文件损坏可能引发奇怪的线程状态问题。找到Scanner的缓存目录(默认是用户主目录下的
~/.sonar/cache,或者项目根目录的.sonar文件夹),删除整个缓存文件夹后重新执行扫描命令。 - 优化MySQL连接池参数:MySQL 5.7的连接池配置不当会间接影响SonarQube的线程资源。检查
sonar.properties里的sonar.jdbc.maxActive和sonar.jdbc.maxIdle,建议maxActive设为10-20,maxIdle设为5-10,确保数据库连接能及时释放,避免线程被阻塞导致清理不彻底。 - 临时降级Scanner版本(备选):虽然你之前用3.0.3.778正常,但如果环境有隐性变化(比如JDK版本更新、系统补丁),可能出现兼容性问题。可以尝试降级到Scanner 2.9.x版本,这个版本和SonarQube 6.7.x的兼容性更稳定,测试是否还会触发异常。
附上你遇到的异常信息:
java.lang.IllegalStateException: load called twice for thread 'Worker 0 (UUID=AWEm-qWI05DFyrKNBSuu) on ce-worker-0' or state wasn't cleared last time it was used
at com.google.common.base.Preconditions.checkState(Preconditions.java:197)
at org.sonar.server.setting.ThreadLocalSettings.load(ThreadLocalSettings.java:153)
at org.sonar.ce.settings.Setti...
内容的提问来源于stack exchange,提问作者Donny Tang
相关产品推荐
相关产品推荐

