k8s容器的内存设置的踩坑记录

 更新时间:2025年07月04日 09:06:43   作者:ant-666  
这篇文章主要介绍了k8s容器的内存设置的踩坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题场景

通过k8s启动了一个容器,容器中运行了一个java应用及日志跟踪服务,在运行过程中发现容器经常重启,重启的原因为:cgroup out of memory。

运行指标

k8s容器内存限制:4G;jvm最大内存设置:3.2G。

问题分析

1) jvm内存溢出了;

2) 容器内存溢出了。

过程跟踪

1) 通过跟踪jvm内存的占用情况,模拟应用请求,发现在容器被killed时,jvm内存正常。

2) 查看容器运行的宿主服务器日志,/var/log/message,查看结束条件。 初步分析,容器内存确实超出最大内存限制:4G。如下图。

3)初步分析,在容器被killed时,jvm是运行正常的,而容器运行需要的其他内存空间不够,导致容器整体内存占用大于4G;linux系统基于内存占用评分机制,找出占用内存使用最大的进程,将进行杀掉了;容器被删掉后,k8s通过调度重新启动了容器实例。

如何设置容器的总内存大小呢?

容器的总内存 = 应用程序内存 + 容器服务内存。对于java程序,jvm内存大小,可以通过jvm调参和jvm监控,寻找最合适的内存大小参数;对于容器服务内存,可以基于k8s的弹性机制进行设置,大小可默认为应用程序内存的1/2。

1) jvm内存大小调试,对于后台管理或后台任务调度类,jvm内存溢出场景参数为:jvm老年代内存占满,并且垃圾回收次数不断增加,CPU占用率几乎100%。

JVM内存参数建议还是使用-Xms、-Xmx进行设置,不建议使用-XX:MaxRAMPercentage  -XX:InitialRAMPercentage -XX:MinRAMPercentage设置。因为-Xms、-Xmx是基于应用程序功能调优后的值,如果根据容器内存大小随意变更,效果可能适得其反。

2) 容器服务内存可以在保证应用程序正常运行的情况下,根据实际情况调整。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一文搞懂K8S中的NodeSelector

    一文搞懂K8S中的NodeSelector

    NodeSelector是Kubernetes用于指定Pod运行节点的机制,通过节点上的标签(label)来选择性地调度Pod,增加调度的灵活性和精确性,首先需要给节点打上标签,本文给大家介绍K8S中的NodeSelector,感兴趣的朋友一起看看吧
    2024-10-10
  • Podman开机自启容器实现过程及与Docker对比

    Podman开机自启容器实现过程及与Docker对比

    这篇文章主要为大家介绍了Podman开机自启容器实现过程,通过示例代码的形式进行演绎过程,有需要的朋友可以参考下,希望可以有所帮助
    2021-09-09
  • 关于CentOS7日志文件及journalctl日志查看方法

    关于CentOS7日志文件及journalctl日志查看方法

    这篇文章主要介绍了关于CentOS7日志文件及journalctl日志查看方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • k8s中secret的用法详解

    k8s中secret的用法详解

    secret用于加密pod访问数据库的用户凭证,这篇文章主要介绍了k8s中secret的用法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • kubernetes k8s常用问题排查方法

    kubernetes k8s常用问题排查方法

    新手学习K8s最大的难度感觉是在起步动手实践的时候,Pod没有正常启动起来,或者运行了一段时间Pod自己崩溃了。是什么问题导致了它没运行起来,或是什么因素导致了它的崩溃,本文来学习总结几个使用 K8s时常见的错误现象以及排查这些现象背后问题的方法
    2022-06-06
  • 一文讲解如何获取k8s容器里运行的jar包

    一文讲解如何获取k8s容器里运行的jar包

    K8S是Google开源的容器集群管理系统,其设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台,这篇文章主要给大家介绍了关于如何获取k8s容器里运行的jar包的相关资料,需要的朋友可以参考下
    2022-09-09
  • K8S删除pod的4种方法小结

    K8S删除pod的4种方法小结

    在Kubernetes集群环境中工作时,有时会遇到需要从一个工作节点中删除pod的情况,下面这篇文章主要给大家介绍了关于K8S删除pod的4种方法,需要的朋友可以参考下
    2024-01-01
  • CentOS 8.2 k8s 基础环境配置

    CentOS 8.2 k8s 基础环境配置

    这篇文章主要介绍了CentOS 8.2 k8s 基础环境配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • K8s学习之Pod的定义及详细资源调用案例

    K8s学习之Pod的定义及详细资源调用案例

    Kubernetes将所有内容抽象为资源,通过操作资源管理集群,核心单元是Pod,通过控制器管理Pod,资源管理分为命令式对象管理、命令式对象配置和声明式对象配置,各有适用场景,需要的朋友可以参考下
    2024-09-09
  • 基于云服务MRS构建DolphinScheduler2调度系统的案例详解

    基于云服务MRS构建DolphinScheduler2调度系统的案例详解

    这篇文章主要介绍了基于云服务MRS构建DolphinScheduler2调度系统,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论