Quarkus v2.1.3开发模式热重载后应用挂起无响应如何解决?
根因分析
- 日志第一条WARN显示
com.austinv11.servicer.ServicerProcessor注解处理器仅支持JDK8,与项目使用的JDK11编译版本不兼容,拖慢了热重载阶段的编译效率 - Quarkus 2.1.3版本存在已知热重载缺陷:
RuntimeUpdatesProcessor的重入锁在热重载触发、Kafka客户端优雅关闭的场景下会出现锁竞争,导致vert.x工作线程被长时间阻塞,超过默认60秒阈值后应用停止响应HTTP请求
解决方案
- 修复注解处理器兼容问题:
升级com.austinv11.servicer依赖到支持JDK11的最新版本,若无法升级可在开发环境的maven配置中临时排除该注解处理器,避免编译阶段的版本冲突 - 修复Quarkus热重载线程阻塞问题:
- 优先方案:直接将Quarkus版本升级到2.2.0.Final及以上,该版本官方已修复
RuntimeUpdatesProcessor锁竞争导致的线程阻塞缺陷 - 临时适配方案:若暂时无法升级Quarkus版本,在
application.properties中添加以下配置:# 调整vert.x线程阻塞阈值到120秒,避免热重载过程中误判超时 quarkus.vertx.max-event-loop-execute-time=120000 # 缩短Kafka客户端关闭超时时间,减少锁持有时长 quarkus.kafka.max-shutdown-timeout=1s
- 优先方案:直接将Quarkus版本升级到2.2.0.Final及以上,该版本官方已修复
- 验证:执行
mvnw compile quarkus:dev启动开发模式,修改代码触发热重载,确认无线程阻塞异常抛出、应用可正常响应HTTP请求即可
内容的提问来源于stack exchange,提问作者Benjamin Gamard
相关产品推荐
相关产品推荐

