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

OKD集群运行带持久层的Spring Boot测试时Jenkins Agent被杀死问题求助

问题根因推测

最核心的原因是进程内存超限被系统OOM Killer终止,你看到的无任何异常堆栈直接输出Killed是Linux内核OOM Killer主动杀进程的典型特征,被杀时机刚好落在Hibernate/JPA持久层初始化阶段:该步骤需要批量加载实体类、创建JPA代理对象、初始化ORM上下文,内存占用会突然飙升。
即使你确认集群没有配置全局资源配额,有两个容易忽略的默认配置会触发该问题:

  1. Jenkins官方Helm Chart默认给Agent Pod分配的内存上限极低,通常为256M/512M,完全无法满足Spring Boot测试启动持久层的最低内存要求
  2. JDK11在未显式配置容器感知参数的情况下,会默认按宿主机总内存比例分配堆内存,很容易超出Pod的隐藏内存限制被K8s主动终止

排查验证步骤

先确认是否为OOM导致的终止:

  • 执行kubectl describe pod <被杀的Agent Pod名称> -n <Jenkins所在命名空间>,查看Terminated字段的Reason是否为OOMKilled,Exit Code是否为137
  • 登录Agent Pod所在的OKD节点,执行dmesg | grep -i oom,查看是否有对应jnlp-agent进程被OOM Killer终止的内核日志

修复配置方案

修改你的Jenkins Agent配置,增加资源限制和JVM容器感知参数即可:

additionalAgents:
  jdk-11:
    podName: jdk-11
    customJenkinsLabels: jdk-11
    image: jenkins/jnlp-agent-jdk11
    tag: latest
    # 新增资源配置,可根据项目大小调整,Spring Boot测试最低建议配置2G内存上限
    resources:
      limits:
        cpu: "2"
        memory: "2Gi"
      requests:
        cpu: "1"
        memory: "1Gi"
    # 新增JVM参数,限制堆内存不超过Pod内存的75%,避免超出Pod限制
    env:
      - name: JAVA_OPTS
        value: "-Xms1G -Xmx1.5G -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"

如果你的项目使用Maven的Surefire/Failsafe插件执行测试,还需要在pom.xml中限制测试进程的内存占用,避免和主构建进程抢占内存:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>-Xmx512M</argLine>
  </configuration>
</plugin>

调整后如果仍出现进程被杀的情况,可继续调高Agent Pod的内存上限即可。


内容的提问来源于stack exchange,提问作者mulithemuli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03