k8s最佳实践:部分业务POD内存持续泄露问题

本文探讨了K8S集群中部分PHP业务POD内存持续泄露的问题,分析了内存使用主要集中在slab的dentry对象上,由于PHP-FPM处理大POST请求时创建大量临时文件导致。解决方案包括清理dentry缓存和调整内存计数策略。此外,文中还列举了其他可能导致内存泄露的场景,如nginx反向代理和特定web框架的行为。
摘要由CSDN通过智能技术生成

K8S部分业务POD内存持续泄露问题

1.前言

线上K8S集群有极少量的PHP业务,它们的POD内存持续走高直到OOM,相信与特殊代码场景有关,需要展开分析。

我从POD的内存监控原理入手,分析到底内存用到了哪些地方。

2.分析过程

  • 第一步:分析pod的内存限制原理

    • 容器化依赖Cgroup限制内存资源,Docker采集容器的内存使用量也是基于Cgroup技术
    • 实际上,Cgroup标准做法是把每个子系统作为一棵树(Hierarchy),然后在树里面创建子cgroup做 资源限制。
    • Centos默认创建了这样的N颗树,每棵树管理1个子系统,K8S就是在这些树中创建子目录来使用Cgroup能力。
  • 第二步:分析pod的内存限制是如何实现的(以内存memory为例,我们知道POD可以设置resource limit)

    • 首先docker ps找到目标pod的相关容器,至少有2个容器,一个是pause容器,一个是应用容器

    • 拿着应用容器的container id,执行docker inspect 可以看到label里有一个pod唯一标识uid

    • K8S创建了kubepods子cgroup,仍旧以memory为例

      • ll /sys/fs/cgroup/memor
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值