Docker资源限制
默认情况下,容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资源。Docker提供了一种控制分配多少量的内存、CPU或阻塞I/O给一个容器的方式,即通过在docker run或docker create命令时设置运行时配置的标志。
在Linux主机上,如果内核检测到没有足够的内存来执行重要的系统功能,它会抛出一个OOME(Out Of Memory Exception),一旦发生OOME,Linux就会开始查杀进程以释放内存。任何进程都有可能会被杀死,包括docker daemon和其他重要的应用程序。如果错误的进程被杀死,这可会降低整个系统的使用效果。
限制Docker使用内存
在Docker中可以强行限制容器的资源使用的限制,即只允许容器使用不超过给定数量的系统内存或其他软限制。下面介绍几个最常用的选项,我们可以在docker run或docker create创建容器时指定,用以限制容器的资源使用限制。
选项 | 描述 |
---|---|
-m 或 -memory= | 容器可以使用的最大内存量。如果你设置了此选项,那么允许的最小值为4m(4MB)。 |
–memory-swap | 允许此容器交换到磁盘的内存量。 |
–kernel-memory | 容器可以使用的最大内核内存量,允许的最小值是4m(4MB)。由于内核内存无法换出,因此内核内存不足的容器可能会阻塞主机资源,这可能会对主机和其他容器产生副作用。 |
限制Docker使用CPU
默认情况下,每个容器对主机CPU周期的访问权限是不受限制的。我们可以设置各种约束来限制给定容器访问主机的CPU周期。大多数用户使用和配置CFS调度程序(默认)或实时调度程序。下面介绍几个常用的选项,用于配置默认的CFS调度程序,以限制容器对于CPU的使用。
选项 | 描述 |
---|---|
–cpus= |
指定容器可以使用的可用CPU资源量,例如宿主机有4个CPU,那你可以给容器设置–cpus=”3.5”,则限制容器最多使用3.5个CPU。 |
–cpuset-cpus | 限制容器可以使用的特定CPU或核心,例如宿主机有4个CPU,那你可以给容器设置–cpuset-cpus=”1,3”,则限制容器只能使用第2个和第4个CPU。。 |
实例
Docker的资源限制实现:
1 | docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress --vm 2 |
Docker-compose的资源限制实现:
1 | version: "3" |
kubernetes的资源限制实现:
1 | kind: Deployment |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zane!
评论