抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

默认情况下容器可以无限制地使用主机的 CPU 和内存资源,可通过设置参数来进行限制。下面说说 Docker 如何限制 CPU 内存使用!

Docker 限制 CPU 使用

  • --cpus=VALUE

限制容器可使用多少 CPU,可设置为小数,如可以设置--cpus=1.5。该选项代表使用 CPU 的百分比,而不是具体的个数。例如主机一共有四个 CPU,设--cpus=2,不代表两个 CPU 被 100%占用,另外两个完全空闲,可能四个 CPU 各被占用 50%。

  • --cpu-period=VALUE

指定 CFS 的周期,通常和--cpu-quota=VALUE 一起使用,单位毫秒。默认是 100 毫秒,但大多用户一般不会改变这个值,使用--cpus=VALUE 更方便。

  • --cpu-quota=VALUE

指定容器在一个 CFS 调度周期中可使用 CPU 的时间,单位毫秒。通常和--cpu-period=VALUE 一起使用,一般使用--cpus=VALUE 更方便。

  • --cpuset-cpus=VALUE

限制容器可以使用指定的 CPU。如果有多个 CPU,可以以逗号分隔或者使用连字符进行指定。

  • --cpu-shares=VALUE

容器使用 CPU 的权重,默认是1024,不设置或者将其设置为 0 都将使用默认值,数值越大权重越大。这是个软限制,只有 CPU 资源不足时才会生效。当 CPU 的资源充足时,各个容器可在不超过资源限制的条件下使用 CPU 资源;当 CPU 资源不足,并有多个容器竞争 CPU 资源时,系统会根据每个容器的权值和所有容器权值的比例来给容器分配 CPU 的使用时间,如果器 A 设置为--cpu-shares=2048,容器 B 设置 --cpu-shares=1024,则容器 A 会被分配约 66%的 CPU 时间,容器 B 被分配约 33%的 CPU 时间。

  • --cap-add=sys_nice

赋予容器 CAP_SYS_NICE 的能力,允许容器增加进程的友好值、设置实时调度策略、设置 CPU 亲和性和其它的操作。

  • --cpu-rt-runtime=VALUE

在 Docker 守护进程的实时调度程序周期内,容器可以实时优先级运行的最长时间,单位毫毛,必须设置了--cap-add=sys_nice 参数才能使用。

  • --ulimit rtprio=VALUE

允许容器设置的最大实时优先级,必须设置了--cap-add=sys_nice 参数才能使用。

限制内存使用

  • --memory=VALUE

内存限制,最小值 6M。

  • --memory-swap=VALUE

内存加交换分区的限制,只有设置了--memory=VALUE 之后,这个参数才有意义。如--memory=300m --memory-swap=1g,那么容器可使用 300M 的内存和 700M 的交换分区;如设置的数值和--memory=VALUE 一样,那么容器无法使用交换分区;如果该值没有设置,容器最多可以使用和--memory=VALUE 一样大的交换分区;如果该值设置为 0,等于没有设置;如果设置为-1,可以使用的交换分区大小无限制。

  • --memory-swappiness=VALUE

默认情况下容器的内核可交换出一定比例的匿名页,此参数用来设置可用的比例。数值在 0-100 之间,0 代表关闭匿名页交换,100 表示所有匿名页都可交换。如果没有设置该值,该值默认从父进程继承而来。

  • --memory-reservation=VALUE

是种软性限制,确保容器不会长时间占用超过--memory-reservation=VALUE 限制内存大小,但不保证时时刻刻都不超过该限制值。该值比--memory=VALUE 小时,在主机内存资源紧张时,会强迫容器内存占用不超过该值;在没有设置时,该值和--memory=VALUE 的值相同;将其设置为 0 或者大于--memory=VALUE 时,等于没有设置。

  • --kernel-memory=VALUE

容器可以使用的最大内核内存值,最小值 4M。

  • --oom-kill-disable

默认情况下 OOM 错误发生时,主机会杀死容器进程来获取更多内存。使用该选项可以避免容器进程被杀死,但是应该在设置了--memory=VALUE 参数之后才能使用该选项,不然不会限制容器内存使用,却禁止主机杀死容器的进程,出现 OOM 错误时,系统会杀死主机进程来获取内存。

评论