文章目录
前言
在上一篇文章中我已经介绍了 Linux 容器实现隔离的手段 – Namespace。Namespace 技术实际上修改了应用进程看待整个计算机视图,即它的视线被操作系统做了限制,只能看到某些指定的内容。但其实对宿主机来说,这些隔离了的进程与其他进程并无多大区别。
在介绍完隔离技术后,我们再来介绍一下容器的限制技术。
Linux Cgroups
也许你会问,我们不是通过 Linux Namespace 创建了一个容器了嘛,为什么还是需要对容器做限制呢?
我们可以这么想,虽然容器内的第 1 号进程在障眼法的干扰下只能看到容器里的情况,但是宿主机上,它作为第 100 号进程与其他所有进程之间依然是平等的竞争关系。这就意味着,虽然第 100 号进程表面上被隔离了起来,但是它所能够使用到的资源(比如 CPU、内存),却是可以随时被宿主机上的其他进程(或者其他容器)占用的。当然,这个 100 号进程自己也可能把所有资源吃光。这些情况,显然都不是一个沙盒应该表现出来的合理行为。
所以,我们应该对此加以限制,而 Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的一个重要功能。
Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。
在 Linux 中,Cgroups 给用户暴露出来的操作接口是文件系统,即它以文件和目录的方式组织在操作系统的 /sys/fs/cgroup 路径下。在 /sys/fs/cgroup 下面有很多诸如 cpuset、cpu、 memory 这样的子目录,也叫子系统。这些都是我这台机器当前可以被 Cgroups 进行限制的资源种类。Cgroups 的每一个子系统都有其独有的资源限制能力,比如:
- cpu:限制进程在一段时间内能够分配到的 CPU 时间
- blkio:为块设备设定 I/O

最低0.47元/天 解锁文章
677

被折叠的 条评论
为什么被折叠?



