当前位置: 首页 > article >正文

生产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直接内存不够问题。通过使用线程池一个线程解压完文件,再数据加载入库,最后删除数据文件,同时需要控制线程数不要太多,防止线程切换耗时且处理多个线程出现内存溢出问题。


http://www.kler.cn/a/326169.html

相关文章:

  • 【docker】exec /entrypoint.sh: no such file or directory
  • 跟着逻辑先生学习FPGA-第六课 无源蜂鸣器发声实验
  • scrapy爬取图片
  • C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
  • C++ 多线程异步操作
  • kubeneters-循序渐进Cilium网络(二)
  • Ubuntu 镜像替换为阿里云镜像:简化你的下载体验
  • linux内核双向链表使用list klist
  • YOLOv11改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制
  • L2-004 这是二叉搜索树吗?
  • C++中vector类的使用
  • Google Tag Manager - 服务器端代码植入
  • Python与SQL Server数据库结合导出Excel并做部分修改
  • ElasticSearch安装分词器与整合SpringBoot
  • 【制作自解压程序】使用7Z制作自解压程序
  • OceanBase技术解析:自适应分布式下压技术
  • 【软件整理资料】软件项目配套资料,项目计划书(word)
  • IDEA使用技巧和插件推荐
  • 爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析
  • js中的深拷贝与浅拷贝 手写深拷贝代码
  • 深入剖析 Android Lifecycle:构建高效稳定的应用
  • 如何设计能吸引下载的截图以及注意事项
  • SpringBoot助力墙绘艺术市场创新
  • golang学习笔记16-数组
  • java 解析excel (本地资源)
  • Android常用C++特性之std::find_if