【容器篇】Docker 怎么限制资源使用
写在前面
上一篇关于容器的内容中,我介绍了容器做资源隔离的原理。但是并没有对于 CPU 和内存的隔离机制那么,容器对于宿主机的 CPU 和内存资源是怎么处理的呢。
Docker 资源限制原理
容器的出现,让应用实现了一定意义上的隔离。但是宿主机上多个容器,如果每个容器都可以任意地使用主机的 CPU 、内存等资源,如果某一个容器使用的主机资源过多,可能导致主机的资源竞争,进而影响业务。所以容器还有个必杀技--资源限制,而这项技能的实现技术就是 Linux 内核提供的 cgroups。
什么是 cgroups
cgroups(全称:control groups)是 Linux 内核的一个功能,它可以实现限制进程或者进程组的资源。
cgroups 的介绍
cgroups 如何实现资源限制
这里主要介绍俩大 cgroup 子系统:CPU 子系统和内存子系统。
CPU 子系统
这是 CPU 子系统的挂载目录。只需要在此目录下创建对应的文件夹,自动会在该文件夹下生成关于 CPU 限制的相应文件。其中 cpu.cfs_period_us 用来配置时间周期长度;cfs_quota_us 用来配置当前 cgroup 在设置的周期长度内所能使用的 CPU 时间数,两个文件配合起来设置 CPU 的使用上限。
两个文件的单位都是微秒(us),cfs_period_us 的取值范围为 1 毫秒(ms)到 1 秒(s),cfs_quota_us 的取值大于 1ms 即可,如果 cfs_quota_us 的值为-1(默认值),表示不受 cpu 时间的限制。
内存子系统
同样的,这是内存子系统的挂载目录。在该目录下创建对应的文件夹,自动会在该文件夹下生成关于内存限制的相应文件。实际上只有 memory.limit_in_bytes 文件代表内存使用总量,单位为 byte。
总结
其实容器在实现的过程中,都是依赖于 Linux 内核的原有功能。只不过将其稍加整合发展,就使得技术向前迈进一大步,开创了容器的时代!
版权声明: 本文为 InfoQ 作者【技术小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/f4db6d04c29e926213748d51a】。文章转载请联系作者。
评论