如果应用所使用的 java 版本在 8及8以下, JVM 在没有认为设定 Xmx Xms 时, 会根据 宿主机的内存进行 JVM 的参数设置,这样就会导致很大的问题。

比如,如果你的宿主机内存在 8G, 你的容器设置为 1G,那么 JVM 根据你的宿主机内存,给到你应用 2G左右的堆内存,此时 JVM 会按照 2G 进行 GC,此时会出现 OOM ,而导致容器被 kill 的情况。

这一情况在此篇博客中有详细探讨:

《Kubernetes之路 1 - Java应用资源限制的迷思》

https://blog.csdn.net/maoreyou/article/details/80134303

解决办法有三种:

一、 手动指定 应用启动时的 JVM 参数:

JVM的参数指定可以参考这几篇文章:

1、 根据这篇中的参数进行初步设定

《关于JVM突破Docker内存限制的解决方案及JVM推荐配置》

https://blog.csdn.net/cy_7030/article/details/81536590

2、 根据这篇中的 JVM 参数调优方法,参考实际应用,重新调整 JVM 值:

《JVM内存设置多大合适?Xmx和Xmn如何设置?》

https://www.cnblogs.com/zhangfengshi/p/11343102.html

《JVM 调优总结》

https://www.cnblogs.com/diegodu/p/9849611.html

《 jstat命令查看jvm的GC情况 (以Linux为例)》

https://www.cnblogs.com/yjd_hycf_space/p/7755633.html

《jvm 性能调优工具之 jmap》

https://www.jianshu.com/p/a4ad53179df3

还需要注意: 如果你的 Docker 中启动 java 使用的是 sh 而非 /bin/bash ,java进程的 pid 是1,

会导致:

Unable to get pid of LinuxThreads manager thread

通过使用 /bin/bash 启动可以解决:

《jstack on alpine:Unable to get pid of LinuxThreads manager thread》

https://blog.csdn.net/xianzi1261618338/article/details/83382989

二、 使用 java9 及以上版本,使用 容器资源感知特性:

java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap …

三、 使用这位大神制作的 tomcat 8 自动感知 CGroup 的镜像:

参考:

《如何设置Docker容器中Java应用的内存限制》

https://yq.aliyun.com/articles/18037

解决 k8s 限制内存后 还出现 OOM 错误的问题:资源整合相关推荐

  1. 解决安装VC6.0后出现MSDEV.EXE错误,无法用打开工程解决方法

    问题:安装VC6.0后,在打开项目或添加文件时,出现如下错误: 可能导致原因:由于Ms安装软件的兼容性问题,导致VC6.0安装不完全, 解决方法:--网上打sp6补丁的方法貌似不可用,所以可以采用另一 ...

  2. 解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题

    解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题 参考文章: (1)解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题 (2)https://www.cnblogs.co ...

  3. Android 内存溢出解决方案(OOM)

    众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...

  4. Android加载图片OOM错误解决方式

    前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...

  5. 2万字|30张图带你领略glibc内存管理精髓(因为OOM导致了上千万损失)

    由于此文涉及内容较多,且malloc和free的流程图太大,导致被压缩,需要本文pdf或者高清 原图的,请关注公众号[高性能架构探索],也可以后台回复[pdf],获取计算机必备经典书籍 前言 大家好, ...

  6. 解决0X000000该内存不能为read 的方法

    当我们正在使用IE6.0或者是7.0,升级到了8.0.突然间我们的IE浏览器打开的时候会出现下面 这个时候不管是我们修改注册表还是重启都不能解决问题 我们不要着急这是因为我们升级的时候新的IE8会有漏 ...

  7. chrome 占用大量内存直到网页崩溃_Chrome吃内存太夸张!几招解决Chrome占内存硬伤...

    我们知道Chrome是非常出色的浏览器,无论从性能还是功能的角度来看,都是如此.但是Chrome在内存占用方面的表现,就很令人头疼了!常常听到有朋友抱怨,想要上网找找素材,不一会儿发现Chrome已经 ...

  8. weblogic进程自动关闭_手机内存不够还卡顿,那是你不会清理,关闭这3个设置就变流畅...

    文章原创,请勿肆意抄袭.转载.搬运 市场上有数百款不同的手机,每个人选择手机的角度都是不同的.有人喜欢颜值高的,有看重品牌的,还有处理器.内存.价格等等都是决定购买手机的重要因素. 到底哪一个最重要呢 ...

  9. win8 计算机内存不足怎么办,如何解决Win8电脑内存不足的问题?

    Win8系统全新的界面及多样的功能,越来越多的用户开始选择使用Win8系统.不过,最近却有不少Win8用户反映自己的电脑明明内存够用,但系统总是提示电脑内存不足,这该怎么办?如何解决这样的问题呢?现在 ...

最新文章

  1. 《C++primer》第一章--开始
  2. php递归函数return会出现无法正确返回想要值的情况
  3. [深度学习] 自然语言处理---Transformer实现(二)
  4. kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中
  5. vagrant使用_使用Vagrant的初学者指南
  6. Quality Assurance (QA)
  7. netbeans 添加gif图片_告别PC 用手机完成各种GIF动画编辑
  8. MVP 在项目中的最佳实战(封装篇)
  9. android 动画x轴旋转,android – 动画在视图之间转换,在z轴上旋转...
  10. 性能调试工具——oprofile
  11. 考研日语线上笔记(一):考研日语203大纲陌生、易混词汇本
  12. LaTeX 下载及命令行
  13. elixer学习笔记
  14. Android 指定宽高的ViewGroup
  15. Android 线程 Damo
  16. 1469: 数星星(结构体专题)
  17. 猪悟能淘宝店商品下载专家 v1.2
  18. HTML学习笔记_常用标签的使用及注意事项
  19. 财务欺诈研究中常用的违规类型
  20. 中高级iOS大厂面试宝典,进厂率80%,金三银四将是你的新起点

热门文章

  1. 【转载】北大acmnbsp;题目分类
  2. UCI on PUSCH 协议角度解析
  3. 关于vue-admin-element在切换角色登入后权限不足致使页面404
  4. 广告加载失败,请稍后重试 ks: 310004,gdt:5006
  5. 卸载Norton 8企业版的一次经历
  6. Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息
  7. 多系统共用一个瑞星杀毒软件(转)
  8. Mac下的串口调试工具(2018更新)
  9. tomcat配置pid文件
  10. Nexus 配置私有的镜像仓库