今天继续给大家介绍Linux运维相关知识,本文主要内容是Docker的CPU资源限额配置。
当我们在一台设备上运行多个Docker时,我们会对一个Docker容器的使用进行限制,避免其使用过多的系统硬件资源,而造成其他的容器“饿死”的现象。在Docker的使用中,我们通过使用cgroup来对Docker的容器资源使用进行限制。
Docker对容器CPU的限制可以分为三种,即相对份额限制、绝对使用限制以及CPU核心控制。

一、CPU相对份额限制

所谓CPU相对份额限制,指的是给Docker的镜像分配一个“份额”,使得当CPU资源紧张时,不同的Docker镜像之间对CPU资源的竞争大致上是按照这个份额的比例来进行使用的。
但是,CPU的相对份额限制又不是绝对的,即当CPU资源不紧张时,任何一个Docker容器都可以“任意”占据CPU资源。这样,即使是一个份额比较小的Docker容器,占据的CPU资源也会超过份额比较大的Docker容器。
Docker容器在执行运行命令时,可以使用-c(或者是–cpu-shares)参数来指定该容器的CPU使用份额。在默认情况下,Docker容器的CPU份额是1024。
由于该参数对CPU限制的特殊性,因此,当系统中只有一个Docker容器在运行的时候,该参数的配置是没有意义的。即,这种CPU限制只会在CPU资源紧缺时才会生效,任何一个Docker容器都可以在CPU资源不紧缺的时候,都可以任意的占据使用CPU,这种限制此时不会生效,同样的,这种限制也无法保证Docker容器获得多长的CPU使用时间或者是CPU频率。
Docker容器在运行后,我们可以在/sys/fs/cgrou[/cpu/cpu.shares文件中查看我们配置的CPU份额,结果如下所示:
在这里插入图片描述

二、CPU使用绝对限制

不同与CPU的份额相对限制,Docker还支持一种“硬性”的对CPU资源的限制。我们都知道,现代操作系统为了保证多程序多任务的运行,对CPU的使用采取了分片的策略,CPU在使用时会不断的从一个任务切换到另一个任务,每次获得CPU资源的进程实际上就是获得了CPU的使用权,或者说获得了CPU分片。
在Docker容器运行时,我们可以通过–cpu-period和–cpu-quota参数来指定Docker容器对CPU的占用情况。–cpu-priod参数指定容器对CPU使用的分配周期,而–cpu-quota则指定了在该周期内,该进程最多可以使用CPU的时间。–cpu-period和–cpu-quota的单位均为微妙(1秒=1000000微妙)。
例如,我们设置–cpu-period为1000000,设置–cpu-quota的值为100000,则表示在1秒钟内,该Docker容器使用CPU最长为0.1秒。
–cpu-period参数的最小值为1000,最大值为1000000,默认值为100000。–cpu-quota的默认值为-1,表示不进行控制。
Docker容器在运行后,我们可以在/sys/fs/cgrou[/cpu/cpu.cfs_period_us和cpu.cfs_quota_us文件中查看我们的CPU周期和时长配置,如下所示:
在这里插入图片描述

三、CPU核心控制

除了上述对CPU的使用限制外,现代的计算机一般是多核CPU,因此,我们有时还希望一个Docker容器能够固定在一个CPU上运行。这对于NUMA(即非一致存储访问结构)的服务器尤为有用,而对于简单的单核服务器则没有任何作用。
在Docker容器运行时,我们可以使用参数–cpuset来绑定CPU,使得该Docker容器只在固定的CPU上运行。
在Docker容器运行后,我们可以使用task命令查看Docker容器使用的CPU内核,如下所示:
在这里插入图片描述
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

fmt.Println( cpu num:, * cpu num) runtime.GOMAXPROCS(* cpu num) for i := 0; i < * cpu num - 1; i++ { go func() {
ctop 就像 linux 的 top 命令一样,top 用来查看进程的实时状态,而 ctop 用来查看系统中各个 容器 的实时状态 可以看到当期系统中有哪些 容器 ,通过前面的指示灯可以看出是否在运行状态,还有他们的 CPU 、内存、网络、IO 这些重要指标 2. 安装 Linux 下安装方法: wgethttps://github.com/bcicen/ctop/releases/download/v0...
docker (三)—— cpu /内存/磁盘 资源 控制 资源 控制cgroups工具概述功能 设置 CPU 使用率上限 cpu -period与 cpu -quota查看两个配额数值进行 CPU 压力测试 设置 50%的比例分配 CPU 使用时间上限 设置 CPU 资源 占用比( 设置 多个 容器 时才有效) 设置 命令格式分别进入 容器 ,进行压力测试查看 容器 运行状态(动态更新) 设置 容器 绑定指定的 CPU 分配虚拟机4个 CPU 核数并指定核创建 容器 进入 容器 ,进行压力测试执行top命令再按1查看 CPU 使用情况对内存使用的 限制 创建指定物理内存的 容器 创建指定物理内存和swap
1.1 使用CFS调度 默认情况下, 容器 可以无 限制 地使用主机的 cpu 资源 ,可以通过 设置 参数来进行 限制 。一般都采用 Linux 默认的CFS调度法,当然也可以使用实时调度。CFS调度可以使用如下参数来进行 限制 : -- cpu s=<value>: 限制 容器 可以使用多少 cpu ,可以 设置 为小数,例如可以 设置 -- cpu s=1.5。该选项代表使用 cpu 的百分比,而不是具体的个数。例如主机一共有四个 cpu ,设-- cpu s=2,不代表有两个 cpu 被100%占用,另外两个完全空闲,可
通过- cpu -share并不是 cpu 资源 的绝对 数量 ,而是一个相对的权重值,某个 容器 最终能分配到的 cpu 资源 取决于它的 cpu share占所有 容器 cpu share综合的比例。Block IO 是另一种可以 限制 容器 使用的 资源 ,Block IO 指的是磁盘的读写, docker 可通过 设置 权重, 限制 bps和iops的方式控制 容器 读写磁盘的带宽。共享式 CPU 资源 ,是按比例切分 CPU 资源 Docker 默认每个 容器 的权值为1024。在有多个 容器 竞争 CPU 时,我们可以 设置 每个 容器 能会用的 CPU 时间比例,这个比例叫做。
在使用 docker 运行 容器 时,默认的情况下, docker 没有对 容器 进行硬件 资源 限制 ,当一台主机上运行几百个 容器 ,这些 容器 虽然互相隔离,但是底层却使用着相同的 CPU 、内存和磁盘 资源 。如果不对 容器 使用的 资源 进行 限制 ,那么 容器 之间会互相影响,小的来说会导致 容器 资源 使用不公平;大的来说,可能会导致主机和集群 资源 耗尽,服务完全不可用。 docker 作为 容器 的管理者,自然提供了控制 容器 资源 ...
默认情况下 容器 可以使用的主机 CPU 资源 是不受 限制 的。和内存 资源 的使用一样,如果不对 容器 可以使用的 CPU 资源 进行 限制 ,一旦发生 容器 内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源 耗尽,从而导致更大的灾难。本文将介绍如何 限制 容器 可以使用的 CPU 资源 。 本文的 demo 中会继续使用《 Docker : 限制 容器 可用的内存》一文中创建的 docker 镜像 u-stress 进行压力测试,文中就不再过多的解释了。 限制 可用的 CPU 个数 在 docker 1.13 及更高的版本上,能够很容易的 限制 容器 可以使用的主机 CPU 个数。只需要通过 – cpu s 选项指定 容器 可以使
docker 进阶!cgroup的 资源 控制 docker 资源 配置 方法 cpu 使用率控制利用stress工具测试 cpu CPU 周期控制 cpu core控制 CPU 配额控制参数的混合使用内存 限额 block io 限制 bps和iops 限制 小结 资源 限制 主要类型 资源 限制 的几种方式 资源 限制 的状态查询 docker 资源 配置 方法 docker 通过cgroup控制 容器 使用 资源 配额,包括 CPU ,内存,磁盘三大方面 cpu 使用率控制 CPU 周期:1s为一个周期的定律,参数值一般为100000ms,假如需要给 容器 分配 CPU 使用率的20%