Quarkus 3.22.x升级后Azure Pipelines测试套件失败求助
排查建议与解决方案
一、内存相关排查
- 不要仅调整
-Xmx,重点排查堆外内存:Quarkus(尤其是Dev Services)会大量使用堆外内存,Azure代理的内存告警大概率是堆外内存耗尽导致。在mavenOptions中添加-XX:MaxDirectMemorySize=2g参数,同时添加-XX:+PrintFlagsFinal -XX:+PrintGCDetails启动参数,打印GC日志和完整内存分布,定位内存瓶颈。 - 确认Azure代理实际可用内存:在Maven任务前添加脚本步骤,Linux执行
free -m、Windows执行systeminfo | findstr "Available Physical Memory",验证代理剩余内存是否真的满足需求,避免被其他后台进程占用。 - 降低测试并行度:Quarkus Test默认并行执行易引发内存过载,在
pom.xml的surefire插件中添加配置:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <parallel>methods</parallel> <threadCount>2</threadCount> <forkCount>1</forkCount> </configuration> </plugin>
二、Quarkus测试配置调整
- 强制每次测试重启应用:尽管用
@BeforeEach重置状态,但Quarkus默认复用应用上下文可能残留隐蔽状态。给测试类添加@QuarkusTest(rebuildApplication = true),或在application-test.properties中设置quarkus.test.rebuild-applications=true。 - 限制Dev Services资源:针对MSSQL和S3 Dev Services添加内存限制:
- MSSQL:
quarkus.datasource.devservices.container.env.MEMORY_LIMIT=1g - MinIO(S3 Dev Service):
quarkus.s3.devservices.container.options.memory=1g
- MSSQL:
- 延长全局超时:在
application-test.properties中设置quarkus.test.timeout=300(单位秒),同时在surefire插件中配置:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds> </configuration> </plugin>
三、Azure Pipelines环境优化
- 切换代理规格:如果使用Microsoft-hosted代理,换成大规格虚拟机(如
ubuntu-22.04-large);或改用self-hosted代理,完全控制内存资源。 - 清理代理缓存:在Maven任务前添加
docker system prune -af步骤,清理Dev Services残留的容器镜像,释放磁盘和内存。 - 拆分构建与测试:把Maven任务拆分为“构建(跳过测试)”和“测试”两个独立任务,避免构建阶段的内存占用影响测试。
四、日志与调试
- 开启Quarkus测试详细日志:在
application-test.properties中设置quarkus.log.level=DEBUG,并添加-Dquarkus.log.file.path=quarkus-test.log参数将日志输出到文件,失败后下载日志分析应用启动异常或资源瓶颈。 - 检查系统日志:任务失败后收集Azure代理的系统日志(如Linux的
/var/log/syslog),确认是否存在OOM killer杀死JVM或容器进程的记录。
是否提交Quarkus GitHub Bug?
若以上排查均无效,且能稳定重现问题(即使是随机失败,多次运行可复现),可提交Bug。提交时需包含:
- 最小可复现的
@QuarkusTest测试案例 - Azure Pipelines完整配置(代理类型、JDK版本)
- 测试失败的完整日志(JVM启动参数、GC日志、Quarkus应用日志)
- 本地与Azure环境的差异对比(JDK、Maven、操作系统版本)
内容的提问来源于stack exchange,提问作者Ino van den Berg
相关产品推荐
相关产品推荐

