docker CPU限制参数

Option

Description

--cpus=<value>

Specify how much of the available CPU resources a container can use. For instance, if the host machine has two CPUs and you set --cpus="1.5", the container is guaranteed at most one and a half of the CPUs. This is the equivalent of setting --cpu-period="100000" and --cpu-quota="150000". Available in Docker 1.13 and higher.

--cpu-period=<value>

Specify the CPU CFS scheduler period, which is used alongside--cpu-quota. Defaults to 100 micro-seconds. Most users do not change this from the default. If you use Docker 1.13 or higher, use --cpusinstead.

--cpu-quota=<value>

Impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling. If you use Docker 1.13 or higher, use --cpus instead.

--cpuset-cpus

Limit the specific CPUs or cores a container can use. A comma-separated list or hyphen-separated range of CPUs a container can use, if you have more than one CPU. The first CPU is numbered 0. A valid value might be 0-3 (to use the first, second, third, and fourth CPU) or 1,3 (to use the second and fourth CPU).

--cpu-shares

Set this flag to a value greater or less than the default of 1024 to increase or reduce the container’s weight, and give it access to a greater or lesser proportion of the host machine’s CPU cycles. This is only enforced when CPU cycles are constrained. When plenty of CPU cycles are available, all containers use as much CPU as they need. In that way, this is a soft limit. --cpu-shares does not prevent containers from being scheduled in swarm mode. It prioritizes container CPU resources for the available CPU cycles. It does not guarantee or reserve any specific CPU access.

①   --cpus指示容器可以使用的CPU数量。改参数指定的是百分比,并不是具体的个数。比如:主机有4个逻辑CPU,限制容器—cpus=2,那么该容器最多可以使用的CPU时间是200%,但是4个CPU分配的时间可能是每个CPU各50%,而不一定是有其中2个CPU使用100%,而另2个CPU使用0%。

--cpus是docker 1.13之后才出来的参数,目的是替代--cpu-period和--cpu-quota两个参数,从而使配置更简单。

②   --cpu-period表示的是设置CPU时间周期,默认值是100000,单位是us,即0.1s。

③   --cpu-quota指示容器可以使用的最大的CPU时间,配合--cpu-period值使用。如果—cpu-quota=200000,即0.2s。那就是说在0.1s周期内改容器可以使用0.2s的CPU时间,显然1个CPU是无法满足要求的,需要至少2个CPU才能满足。

④   --cpuset-cpus设置容器具体可以使用哪些个CPU。如--cpuset-cpus=”0,1,2”或者--cpuset-cpus=”0-2”,则容器会使用第0-2个CPU。

⑤   --cpu-shares,容器使用CPU的权重,默认值是1024,数值越大权重越大。该参数仅当有多个容器竞争同一个CPU时生效。对于单核CPU,如果容器A设置为--cpu-shares=2048,容器B设置为--cpus-shres=1024,仅当两个容器需要使用的CPU时间超过整个CPU周期的时候,容器A会被分配66%的CPU时间,容器B被分配33%的CPU时间,大约是2:1;对于多核CPU,仅当多个容器竞争同一个CPU的时候该值生效。

kubernetes对CPU限制

第一种:资源对象LimitRange限制POD和Container的资源

apiVersion: v1
kind: LimitRange
metadata:name: mylimits
spec:limits:- max:cpu: "2"memory: 1Gimin:cpu: 200mmemory: 6Mitype: Pod- default:cpu: 300mmemory: 200MidefaultRequest:cpu: 200mmemory: 100Mimax:cpu: "2"memory: 1Gimin:cpu: 100mmemory: 3Mi
type: Container

第二种:定义pod时候限制资源

spec:containers:- image: gcr.io/google_containers/serve_hostnameimagePullPolicy: Alwaysname: kubernetes-serve-hostnameresources:limits:cpu: "1"memory: 512Mirequests:cpu: "1"memory: 512Mi

如果两者都配置?

先匹配pod里的,再匹配namespace里。

有些时候, 我们大部分容器遵循一个规则就好, 但有一小部分有特殊需求, 这个时候, 小部分的就需要单独在容器的配置文件中指定. 这里有一点要注意的是, 单独在容器中配置的参数是不能大于指定的k8s资源限制, 否则会报错, 容器无法启动

PS: 对于一些java项目, 必须设置java虚拟机的参数, 而且这个参数不能大于容器设置的限定值, 否则容器会因为内存过大不停的重启

其中:

limits.cpu  <==>  --cpu-quota         # docker inspect中的CpuQuota值

requests.cpu  <==>  --cpu-shares     # docker inspect中的CpuShares值

实验对比

测试工具stress介绍

root@ustress-77b658748b-7856l:/# stress --help

`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...

-?, --help         show this help statement

--version      show version statement

-v, --verbose      be verbose

-q, --quiet        be quiet

-n, --dry-run      show what would have been done

-t, --timeout N    timeout after N seconds

--backoff N    wait factor of N microseconds before work starts

-c, --cpu N        spawn N workers spinning on sqrt()  #启动N个进程,每个进程最多占满一个CPU

-i, --io N         spawn N workers spinning on sync()

-m, --vm N         spawn N workers spinning on malloc()/free()

--vm-bytes B   malloc B bytes per vm worker (default is 256MB)

--vm-stride B  touch a byte every B bytes (default is 4096)

--vm-hang N    sleep N secs before free (default none, 0 is inf)

--vm-keep      redirty memory instead of freeing and reallocating

-d, --hdd N        spawn N workers spinning on write()/unlink()

--hdd-bytes B  write B bytes per hdd worker (default is 1GB)

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

创建一个测试镜像

FROM ubuntu:latest

RUN apt-get update && \

apt-get install stress

docker build -t reg.99bill.com/99bill/ustress .

创建一个kubernetes中deployment对象

apiVersion: apps/v1

kind: Deployment

metadata:

labels:

appname: ustress

version: 0.0.6

name: ustress

namespace: default

spec:

replicas: 1

selector:

matchLabels:

appname: ustress

template:

metadata:

labels:

appname: ustress

version: 0.0.6

spec:

containers:

- image: reg.99bill.com/99bill/u-stress:latest

name: ustress

command: ['sh', '-c', 'stress -c 4']

resources:

limits:

cpu: 2   #实验修改值

memory: 1G

requests:

cpu: 1   #实验修改值

memory: 500M

terminationGracePeriodSeconds: 0

nodeName: 192.168.112.10

nodeSelector:

注:

①   command: ['sh', '-c', 'stress -c 4'] 表示开启4个占用CPU的stress进程

②   limits.cpu: 2 对应docker中"CpuQuota": 200000,  "CpuPeriod": 100000默认值

③   requests.cpu:1对应docker中"CpuShares": 1024,

测试一:

limits.cpu: 4

requests.cpu: 0.5

 

结果验证:

1. 查看docker容器参数值:

docker inspect e22896246184

512 = 0.5 * 1024

400000 = 4 * 100000

2. docker stats查看容器CPU使用率

由于设置了CPUQuota是CpuPeriod的4倍,所以容器可以使用400% CPU

3. 使用top查看进程与CPU

使用top命令查看4个stress进程,每个占用100% CPU,总400%,可以看到有4个CPU被跑满。

实验二:

limits.cpu: 6

requests.cpu: 0.5

1. 查看docker容器参数值:

512 = 0.5 * 1024

600000 = 6 * 100000

2. docker stats查看容器CPU使用率

容器可以使用600%的CPU,现在只用400%

3. 使用top查看进程与CPU

实验三:

limits.cpu: 1

requests.cpu: 0.5

1. 查看docker容器参数值:

docker inspect e22896246184

512 = 0.5 * 1024

100000 = 1 * 100000

2. docker stats查看容器CPU使用率

使用时间等于CpuPeriod,占用100%

3. 使用top查看进程与CPU

从下图可以看到,有4个CPU分别使用25%,加起来是100%。所以limits.cpu:1并不一定表示容器只会占用1个CPU,而表示的是容器最多可以使用的CPU时间的比例。

实验四:

limits.cpu: 0.5

requests.cpu: 0.5

1. 查看docker容器参数值

2. docker stats查看容器CPU使用率

3. 使用top查看进程与CPU

docker CPU限制参数相关推荐

  1. Docker cpu memory quota使用说明

    1.Docker内存限制 1.0 测试工具  stress 1.1 内存限制选项 -m, --memory="" Memory limit (format: <number& ...

  2. Docker容器启动参数大全与详细说明

    < Docker容器启动参数大全与详细说明 > 语法: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Docker 容器启动示例,这儿以启动 ...

  3. 实战入门 faiss 搜索bert 最邻近句子:docker CPU镜像开箱即用,无需额外安装下载...

    每天给你送来NLP技术干货! 来自:MyEncyclopedia 在这一期中,我们延续上一期  Bert 中文短句相似度计算 Docker CPU镜像,继续使用 huggingface transfo ...

  4. Linux性能挖潜的隐藏招数:内核CPU亲和性参数调整

    作者:李彬,赵雪枫,金融科技工程师,架构师社区特邀作者! 应用服务性能调优,是每个系统投产前都需要关注的问题,系统及软件层面的调优方法均有大量文章介绍,但在所有招数使出后,是否就无潜可挖了?如果了解L ...

  5. 至强cpu型号列表_装机必看——CPU型号参数详解

    装机必看--CPU型号参数详解 --装机个人练习生-海 在初步解了电脑构成后,我们DIY装机首先要看的就是如何选CPU,今天就带大家详细学习CPU的各类数据. 说到CPU,我们先来介绍下生产CPU的两 ...

  6. Docker CPU 资源限制——CPU分片功能测试

    之前的一篇随笔--Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比. 测试步骤 1.下载CPU测试image.agileek/cpuse ...

  7. 计算机接口参数在哪儿看,怎么看笔记本cpu接口参数

    很多用户购买了CPU后,都想查看有关信息,那如何查看CPU接口参数呢?下面是学习啦小编为大家介绍笔记本电脑CPU接口参数的查看方法,欢迎大家阅读. 笔记本电脑CPU接口参数的查看方法 目前市场上见到比 ...

  8. 阿里云ARM服务器通用型g6r实例CPU性能参数详解

    查看全文 http://www.taodudu.cc/news/show-2713373.html 相关文章: oracle profile 参数,oracle profile的参数详解 CPU各项参 ...

  9. CPU性能参数:MIPS,频率,IPC,CPI,时钟周期,机器周期,指令周期,主频

    CPU性能参数:MIPS,频率,IPC,CPI,时钟周期,机器周期,指令周期,主频 首先,了解下晶振的作用.没有晶振,就没有时钟周期:没有时钟周期,就无法执行程序代码,单片机就无法工作. 单片机工作时 ...

最新文章

  1. php模块介绍,Python模块介绍
  2. python+flask+vue开发(1)--虚拟环境创建
  3. 最全的大数据解决方案(多图)
  4. 多边形填充算法-有序边表法(扫描线算法) 计算机图形学
  5. 服务器内存技术知识充电
  6. Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】
  7. C#ListView控件添加复选框并获取选中的数目
  8. 突然听到一只公鸡的局域网聊天软件
  9. 用了这个方法,您的备份数据再也不怕被勒索了(数据备份防止更改)
  10. 结对项目:黄金点游戏(何珠赵艳)
  11. demo连接php,PHP获取网页所有连接的方法(附demo源码下载)
  12. 解决办法:Invalid Gradle JDK configuration found
  13. vs2010 “SetScrollSizes”: 找不到标识符
  14. 美国免费为全世界提供GPS服务,为什么中国还要搞“北斗”?
  15. flash builder 4.6 mac 版破解方法
  16. java 数据倒叙_Java 数组,如何通过自定义实现倒叙排序?
  17. python 泰森多边形边界_泰森多边形
  18. [CV]光场和它的各种
  19. [UOJ UNR #2]积劳成疾
  20. 关于iPhone出现白苹果黑屏现象的修复方法

热门文章

  1. sw中的转换实体引用工具的使用
  2. 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。
  3. Kali Win-KeX SL
  4. Vue项目 课程列表页 跳转 课程详情页 跳转 视频播放页
  5. 计算机科学和统计专业排名,2021统计学专业大学排名 哪个学校最好
  6. Linux命令行下删除文件内容
  7. 基于百度AI和QT的景物识别系统
  8. 南方电信电网接口API源码
  9. 大数据技术---Hadoop
  10. Mac 网页字体优化小议