写点什么

【容器篇】Docker 怎么限制资源使用

作者:技术小生
  • 2022 年 7 月 15 日
  • 本文字数:857 字

    阅读完需:约 3 分钟

【容器篇】Docker怎么限制资源使用

写在前面

上一篇关于容器的内容中,我介绍了容器做资源隔离的原理。但是并没有对于 CPU 和内存的隔离机制那么,容器对于宿主机的 CPU 和内存资源是怎么处理的呢。


Docker 资源限制原理

容器的出现,让应用实现了一定意义上的隔离。但是宿主机上多个容器,如果每个容器都可以任意地使用主机的 CPU 、内存等资源,如果某一个容器使用的主机资源过多,可能导致主机的资源竞争,进而影响业务。所以容器还有个必杀技--资源限制,而这项技能的实现技术就是 Linux 内核提供的 cgroups。

什么是 cgroups

cgroups(全称:control groups)是 Linux 内核的一个功能,它可以实现限制进程或者进程组的资源。

cgroups 的介绍

cgroups 如何实现资源限制

这里主要介绍俩大 cgroup 子系统:CPU 子系统和内存子系统。

CPU 子系统

cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,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 时间的限制。

1.限制使用2个CPU (每500ms能使用1000ms的CPU时间,即使用两个CPU)
cpu.cfs_period_us = 1000000cpu.cfs_quota_us = 500000
复制代码


内存子系统

cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
复制代码

同样的,这是内存子系统的挂载目录。在该目录下创建对应的文件夹,自动会在该文件夹下生成关于内存限制的相应文件。实际上只有 memory.limit_in_bytes 文件代表内存使用总量,单位为 byte。


总结

其实容器在实现的过程中,都是依赖于 Linux 内核的原有功能。只不过将其稍加整合发展,就使得技术向前迈进一大步,开创了容器的时代!

发布于: 刚刚阅读数: 4
用户头像

技术小生

关注

业务应用架构专家 2019.10.08 加入

主要负责公司内部系统的应用架构设计与落地。擅长Java语言开发,熟悉Python、Shell等。精通K8S等云原生相关技术。

评论

发布
暂无评论
【容器篇】Docker怎么限制资源使用_Docker_技术小生_InfoQ写作社区