You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  • 延长全局超时:在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:12:39