生产k8s 应用容器内存溢出OOMKilled问题处理

**需求:**使用spring batch从上游edb接收数据压缩文件,再将文件解压后使用load将数据入库。解压后单个文件有800M左右。

**问题:**服务正常启动没有问题,且数据量少时也没有内存溢出问题。但是当数据量增大时存在内存溢出问题,服务会被强制重启。

**问题查看:**kubectl describe pod <podName> -n <namespaceName>

在reason中可以看到Pod 的状态为 Terminated,并且 Reason 字段为 OOMKilled。这表示该 Pod 是因为内存溢出(OOM,Out of Memory)被系统终止的。这种状态一般表示节点上的内存不足,无法满足 pod 的内存需求。(如果一个 pod 是因为超过了自己声明的使用限制(memory limit)而被杀死,那么它的 Reason 字段应该是 Evicted。)

解决方案:

1、增加节点内存限制;

资源管理

resources:

#最大使用

limits:

cpu: "8" # 1个cpu=1000m

memory: "16Gi"

2、增加jvm内存溢出时日志打印:

-XX:+HeapDumpOnOutOfMemoryError \

-XX:HeapDumpPath=/appabs/abslogs/dump_pid_%p_time_%t.hprof

3、修改程序逻辑:

不要批量一次将所有文件进行解压,防止磁盘空间不足、jvm直接内存不够问题。通过使用线程池一个线程解压完文件,再数据加载入库,最后删除数据文件,同时需要控制线程数不要太多,防止线程切换耗时且处理多个线程出现内存溢出问题。

相关推荐
.柒宇.3 小时前
信创实战:银河麒麟 V10 服务器安装、网络配置与 Docker 环境搭建
linux·运维·docker·国产信创·麒麟操作系统
IT从业者张某某3 小时前
基于Docker的hadoop容器安装hive并测试
hive·hadoop·docker
杨浦老苏3 小时前
Docker容器管理面板Dockhand
运维·docker·群晖
努力的搬砖人.3 小时前
配置 Docker 镜像加速器
运维·docker·容器
江湖有缘3 小时前
实时监控所有端口,Docker 部署 WatchYourPorts 保姆级教程
运维·docker·容器
IT从业者张某某4 小时前
基于Docker的hadoop容器安装zookeeper
hadoop·docker·zookeeper
guojb8244 小时前
告别部署踩坑:用 Docker Compose 优雅搞定多前端站点、HTTPS 与 SSE 推送
nginx·docker·https
pupudawang4 小时前
docker desktop安装redis
redis·docker·容器
用户78937733908534 小时前
从0到1实战:FastAPI + MySQL 项目 Docker 容器化部署与避坑指南
docker
dLYG DUMS4 小时前
如何在docker中的mysql容器内执行命令与执行SQL文件
sql·mysql·docker