Docker 容器CPU设置
CPU使用率其实就是你运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况。
使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少。
CPU使用率的高低与你的CPU强弱有直接关系。
Docker CPU 限制;
Docker 的资源限制和隔离完全基于 Linux cgroups。
对 CPU 资源的限制方式也和 cgroups 相同。
Docker 提供的 CPU 资源限制选项可以在多核系统上限制容器能利用哪些 vCPU。
而对容器最多能使用的 CPU 时间有两种限制方式:
一是有多个 CPU 密集型的容器竞争 CPU 时,设置各个容器能使用的 CPU 时间相对比例。
二是以绝对的方式设置容器在每个调度周期内最多能使用的 CPU 时间。
--cpuset-cpus="" # 允许使用的 CPU 集合
-c,--cpu-shares= # CPU 共享权值(相对权重)
cpu-period= # 限制 CPU CFS 的周期,范围从 100ms~1s,即[, ]
--cpu-quota= # 限制 CPU CFS 配额,必须不小于1ms,即 >=
--cpuset-mems="" # 允许在上执行的内存节点(MEMs),只对 NUMA 架构有效
NUMA
非统一内存访问(NUMA)是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置。 在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。
CPU 查看在 cat /proc/cpuinfo
docker run -d -it --cpuset-cpus="0,6" --name Centos-3 centos /bin/bash
我们可以设置容器可以在哪些 CPU 核上运行。
例如:
docker run -it --cpuset-cpus="0,6" --name Centos centos /bin/bash
设置容器中的进程可以在 cpu 0 和 cpu 6上执行。
docker run -it --cpuset-cpus="0-5" --name Centos centos /bin/bash
设置容器中的进程可以在 cpu0 - cpu5 上执行。
在 NUMA CPU 架构上,我们可以设置容器可以使用的内存节点。
docker run -it --cpuset-mems="1,5" --name Centos centos /bin/bash
设置容器中的进程只能使用节点 1 和 5 上的内存。
docker run -it --cpuset-mems="0-3" --name Centos centos /bin/bash
设置容器中的进程只能使用节点 0、1、2、3 上的内存。
CPU 资源的相对限制
默认情况下,所有的容器得到同等比例的 CPU 周期。在有多个容器竞争 CPU 时我们可以设置每个容器能使用的 CPU 时间比例。这个比例叫作共享权值,通过-c或--cpu-shares设置。Docker 默认每个容器的权值为 1024。不设置或将其设置为 0,都将使用这个默认值。系统会根据每个容器的共享权值和所有容器共享权值和比例来给容器分配 CPU 时间。
CPU 资源的绝对限制
Linux 通过 CFS(Completely Fair Scheduler,完全公平调度器)来调度各个进程对 CPU 的使用。
CFS 默认的调度周期是 100ms。
设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少 CPU 时间。
--cpu-period 设置调度周期,
--cpu-quota 设置在每个周期内容器能使用的 CPU 时间。
例如:
docker run -it --cpu-period=50000 --cpu-quota=25000 Centos centos /bin/bash
将 CFS 调度的周期设为 50000,将容器在每个周期内的 CPU 配额设置为 25000,表示该容器每 50ms 可以得到 50% 的 CPU 运行时间。
docker run -it --cpu-period=10000 --cpu-quota=20000 Centos centos /bin/bash
将容器的 CPU 配额设置为 CFS 周期的两倍,CPU 使用时间怎么会比周期大呢?其实很好解释,给容器分配两个 vCPU 就可以了。该配置表示容器可以在每个周期内使用两个 vCPU 的 100% 时间。
CFS 周期的有效范围是 1ms~1s,对应的--cpu-period的数值范围是 1000~1000000。
而容器的 CPU 配额必须不小于 1ms,即--cpu-quota的值必须 >= 1000。可以看出这两个选项的单位都是 us。
正确的理解 "绝对"
--cpu-quota 设置容器在一个调度周期内能使用的 CPU 时间时实际上设置的是一个上限。
并不是说容器一定会使用这么长的 CPU 时间。
启动一个容器,将其绑定到 cpu 1 上执行。给其 --cpu-quota 和--cpu-period 都设置为 50000。
docker run -d --name mongo1 --cpuset-cpus 1 --cpu-quota=50000 --cpu-period=50000 docker.io/mongo
调度周期为 50000,容器在每个周期内最多能使用 50000 cpu 时间。
docker run -d --name mongo2 --cpuset-cpus --cpu-quota= --cpu-period= docker.io/mongo
再docker stats mongo-1 mongo-2可以观察到这两个容器,
每个容器对 cpu 的使用率在 50% 左右。说明容器并没有在每个周期内使用 50000 的 cpu 时间。
使用docker stop mongo2命令结束第二个容器,再加一个参数-c 2048 启动它:
docker run -d --name mongo2 --cpuset-cpus --cpu-quota= --cpu-period= -c docker.io/mongo
再用docker stats mongo-1命令可以观察到第一个容器的 CPU 使用率在 33% 左右,第二个容器的 CPU 使用率在 66% 左右。因为第二个容器的共享值是 2048,第一个容器的默认共享值是 1024,所以第二个容器在每个周期内能使用的 CPU 时间是第一个容器的两倍。
Docker 容器CPU设置的更多相关文章
- [转帖]Docker容器CPU、memory资源限制
Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...
- Docker容器CPU限制选项测试
目录 Docker容器CPU限制选项测试 参考 实验环境 --cpu-shares选项 测试 结论 --cpus选项 测试 结论 --cpuset-cpus选项 测试 结论 Docker容器CPU限制 ...
- Docker(二十)-Docker容器CPU、memory资源限制
背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...
- Docker容器CPU、memory资源限制
背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...
- docker容器里设置中文时区
本文讨论docker容器里中文时区的问题,总所周知docker hub上的镜像默认都是英文时区的,在国人使用过程当中需要将时区设置成中文,我原来光配置/etc/localtime了date显示的时间也 ...
- docker容器怎么设置开机启动
https://my.oschina.net/lwenhao/blog/1923003 docker服务器.以及容器设置自动启动 一.docker服务设置自动启动 说明:适用于yum安装的各种服务 查 ...
- docker容器启动设置固定IP
docker安装以后的网络类型 [root@insure updev]# docker network ls NETWORK ID NAME DRIVER SCOPE 14da40175b01 bri ...
- docker 容器中设置 mysql lampp php软链接
在容器中安装xampp后,进入到终端,直接输入mysql php 发现报错,命令未被发现.如果输入/opt/lampp/bin/mysql 就可以进入了,所以我们要找到在容器中安装的位置,然后将他 ...
- reboot 后 Docker服务及容器自动启动设置
https://blog.csdn.net/wxb880114/article/details/82904765 重启reboot操作系统后,发现docker 服务未启动,容器也未启动,天生反骨,怎么 ...
随机推荐
- 如何在 Linux/Unix/Windows 中发现隐藏的进程和端口
unhide 是一个小巧的网络取证工具,能够发现那些借助 rootkit.LKM 及其它技术隐藏的进程和 TCP/UDP 端口.这个工具在 Linux.UNIX 类.MS-Windows 等操作系统下 ...
- bzoj3331 压力(圆方树)
题目链接 圆方树 圆方树就是对于联通无向图中的每一个点双新建一个方点,与点双中的每个点连一条边,然后将原来的边删去.将原来的点看作圆点,新建的点看作方点.所以叫做圆方树. 性质 1.圆方树肯定是棵树( ...
- Miniconda 虚拟环境安装及应用
首先要下载Miniconda安装包 下载地址 链接:https://pan.baidu.com/s/1rj-9exKBSHnCCxqq7JQSxA 提取码:ab53 下一步 打开下载好的M ...
- fcntl F_SETFL
F_SETFL file set flag F_SETFL命令允许更改的标志有O_APPEND,O_NONBLOCK,O_NOATIME,O_DIRECT,O_ASYNC 这个操作修改文件状态标记适用 ...
- 如何计算Java对象所占内存的大小
[ 简单总结: 随便一个java项目,引入jar包: lucene-core-4.0.0.jar 如果是 maven项目,直接用如下依赖: <dependency> <groupId ...
- 第八节、图片分割之GrabCut算法、分水岭算法
所谓图像分割指的是根据灰度.颜色.纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性.我们先对目前主要的图像分割方法做个概述,后面再 ...
- Unity 后处理堆
Unity安装后处理的过程:windows---PacageManager---Post Processing Post Processing后处理堆需要知道要修改那个相机渲染的内容,先定位到相机,再 ...
- scrapy关键字爬取百度图库(一)
刚入门学习python的菜鸟,如有错误,还望指教 爬取百度图库需要知道百度图库的加载方式是通过下拉加载的,所以我们需要分析Ajax请求来爬取每一页的数据信息 表述不清直接上图片 图片一是刷新页面后加载 ...
- RHCSA考试真题
2018年 RHCSA考试真题... ------------ 考前需要做的基础 破解root密码 KVM虚拟机与VM虚拟机 主机名:station.domain1.example.comIP地址:1 ...
- Elastic Stack之FileBeat使用实战
Elastic Stack之FileBeat使用实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客数据流走向:FileBeat ===>logstash == ...