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

求助调试K8s中Spring Boot应用JVM内存持续增长问题

Kubernetes中Spring Boot 3.2.9(Java 21)应用OOMKiller问题排查求助

首次发帖,如有疏漏请见谅。我有一个运行在Kubernetes(k3s)中的Spring Boot 3.2.9应用,基于Java 21(Adoptium JDK Ubuntu Jammy镜像)部署。目前遇到的问题是无法合理设置container.limits.memory值,应用频繁被OOMKiller终止。

应用启动命令如下:

java \
  -XX:NativeMemoryTracking=detail \
  -XX:StartFlightRecording=delay=1m,duration=8h,maxsize=2g,settings=profile,filename=/data/uaa.jfr \
  -XX:+PrintFlagsFinal \
  -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \
  -Xms128m \
  -Xmx256m \
  -XX:+UseG1GC \
  -XX:MaxDirectMemorySize=256m \
  -XX:MaxMetaspaceSize=256m \
  -Xlog:gc:file=/tmp/gc.log \
  -Dserver.port=10000 \
  -Djava.net.preferIPv4Stack=true \
  -Dfile.encoding=UTF-8 \
  -Dsun.jnu.encoding=UTF-8 \
  -Dspring.profiles.active=core \
  -Dspring.config.import="kubernetes:" \
  -jar \
  /opt/backends/uaa.jar

如上述启动参数所示,我已经配置了堆内存、元空间、直接内存等多项限制,但并未起到预期效果。测试时给Pod设置了5GB内存上限,启动后通过JFR记录了2小时的内存使用情况,仅观察到Java Mission Control中的"Total Size"持续增长,该数值与kubectl top pod输出的内存用量大致匹配。

按照理论计算,堆内存(256m)+元空间(256m)+直接内存(256m)加上约5%的额外开销,总内存应该不超过768MB,但实际无论设置多大的容器内存上限,应用最终都会被OOMKiller终止。

现在需要排查内存增长的原因及解决办法,恳请提供内存泄漏排查方向,以及Java 21中可配置的额外内存限制选项。

参考信息:

  • 启动时内存使用情况截图
  • 运行约1小时后内存使用情况截图
  • 与本地内存使用相关的JFR事件截图

运行约142分钟时kubectl top pod输出:

NAME                   CPU(cores)   MEMORY(bytes)
uaa-85bf44c694-t8qxf   18m          1028Mi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:05:18