当前位置: 首页 > 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/news/326169.html

相关文章:

  • 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
  • CF1619D.New Year‘s Problem
  • 解决 TypeError: Expected state_dict to be dict-like, , got <class ‘*‘>.
  • Acwing 最小生成树
  • 每日OJ题_牛客_NC40链表相加(二)_链表+高精度加法_C++_Java
  • 《黑神话:悟空》天命人速通法宝 | 北通鲲鹏20智控游戏手柄评测
  • linux打开桌面软件(wps)、获取已打开的文件名(wps)
  • Ini文件读写配置工具类 - C#小函数类推荐
  • 汽车免拆诊断案例 | 2016 款宾利GT车仪表盘上的多个故障灯点亮
  • 使用TensorFlow实现一个简单的神经网络:从入门到精通
  • 动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络