cgroup中内存超限通知机制

来源:互联网 发布:ios10怎么删除软件 编辑:程序博客网 时间:2024/05/02 00:43

1.背景

CloudFoudry会使用warden,warden使用了cgroup,本文描述cgroup中memory子系统的一些机制,所以本文面向Linux容器管理者比较合适。

 

现在Linux容器的技术比较火,很多云平台都会使用到Linux容器来作为Application的运行环境,例如Cloud Foundry使用的Warden,以及超级热门的Docker。一个App在容器中运行,它的内存是受限的,也就是这个App可以申请的内存上限受到了cgroup的memory子系统的限制,永远无法超过cgroup设定的阈值,这也是为什么要把Linux容器作为app运行环境的一个好处。

可是,当你的App程序在业务量变大的情况下,占用的内存慢慢涨上来,最终触发到cgroup设定的阈值的时候,会发生什么情况呢?

杀!很简单,不过也很暴力。是的,CloudFoundry的默认设置就是当前App内存超过限定时,直接Kill当前App。这对于CF平台来说是简单安全的,但是对App开发者来说略有点粗暴。并且还有一个附带的后果,即当该App有多个实例的时候,其中一个实例因为内存超限被Kill掉后,所有业务请求都到会分发到剩下的App实例上,导致其他App实例的业务量上涨,最终结果可能是连锁的,所有的App实例都被干掉了。

虽然开发者可以选择“自动扩容”这种云平台的高级“Service服务”功能来保证当业务量上升时,App应用的实例数自动增加,从而防止单个App内存上涨超限而被杀掉。不过这个对App开发者的要求略高。

那是不是有其他方式来处理App内存超限后的动作呢?是的cgroup有两个选择,下面会详细分析


0 0