每个运行中的进程都有一个称为OutOfMemory(OOM)分数的值。系统通过比较所有运行进程的OOM分数来选择要杀掉的进程。
当需要释放内存时,分数最高的进程将被杀死。 OOM分数由两个参数计算得出:进程已消耗内存占可用内存的百分比,与一个基于pod QoS等级和容器内存申请量固定的OOM分数调节因子。对于两个属于Burstable等级的单容器的pod,系统会杀掉内存实际使用量占内存申请量比例更高的pod。这就是上图中使用了内存申请量90% 的pod B在pod C(只使用了70%)之前被杀掉的原因,尽管pod C比pod B使用了更多兆字节的内存。
这说明我们不仅要注意requets和limits之间的关系,还要留心requests和预期实消耗内存之间的关系。
既然上面已经提到了相关的request和limits,及时节点上所有的pod都设置了limits,也建议一个节点上的limits不要超卖太多,以防大部分pod在同一时间承受高业务流量,造成节点上的资源被打满,或者把业务高峰期的pod错开放置在不同节点上,以实现资源利用最大化同时,不影响节点上的其他应用,这个需要在应用部署的时候结合业务行为指定部署的最优解。
以上内容摘自《企业级云原生白皮书项目实战》电子书,点击https://developer.aliyun.com/ebook/download/7774可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。