第 4 章 容器 - 028 - 限制容器对CPU的使用
限制容器对CPU的使用
默认设置下,所有容器可以平等地使用 host CPU 资源并且没有限制。
- Docker 可以通过
-c
或--cpu-shares
设置容器使用 CPU 的权重。如果不指定,默认值为 1024。 - 与内存限额不同,通过
-c
设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。 - 某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。
通过 cpu share 可以设置容器使用 CPU 的优先级。
在 host 中启动了两个容器:
docker run --name "container_A" -c ubuntu
docker run --name "container_B" -c ubuntu
- container_A 的 cpu share 1024,是 container_B 的两倍。
- 当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。
需要特别注意的是,这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,这时,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU。
使用 progrium/stress测试一下:
启动 container_A,cpu share 为 1024:
root@ubuntu:~# docker run --name container_A -it -c progrium/stress --cpu
stress: info: [] dispatching hogs: cpu, io, vm, hdd
stress: dbug: [] using backoff sleep of 6000us
stress: dbug: [] --> hogcpu worker [] forked
stress: dbug: [] using backoff sleep of 3000us
stress: dbug: [] --> hogcpu worker [] forked
--cpu
用来设置工作线程的数量。因为当前 host 只有 2 颗 CPU,所以一个工作线程就能将 CPU 压满。如果 host 有多颗 CPU,则需要相应增加 --cpu
的数量。
启动 container_B,cpu share 为 512:
root@ubuntu:~# docker run --name container_B -it -c progrium/stress --cpu
stress: info: [] dispatching hogs: cpu, io, vm, hdd
stress: dbug: [] using backoff sleep of 6000us
stress: dbug: [] --> hogcpu worker [] forked
stress: dbug: [] using backoff sleep of 3000us
stress: dbug: [] --> hogcpu worker [] forked
在 host 中执行 top
,查看容器对 CPU 的使用情况:
root@ubuntu:~# top
top - :: up days, :, users, load average: 3.76, 1.94, 0.81
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root R 66.8 0.0 :22.19 stress #container_A root R 66.4 0.0 :22.23 stress
root R 33.2 0.0 :44.54 stress #container_B
root R 32.9 0.0 :44.49 stress
root S 0.0 0.1 :13.31 systemd
root S 0.0 0.0 :00.01 kthreadd
root S 0.0 0.0 :00.16 ksoftirqd/
root - S 0.0 0.0 :00.00 kworker/:0H
container_A 消耗的 CPU 是 container_B 的两倍。
现在暂停 container_A:
root@ubuntu:~# docker pause container_A
container_A
root@ubuntu:~#
top
显示 container_B 在 container_A 空闲的情况下能够用满整颗 CPU:
root@ubuntu:~# top
top - :: up days, :, users, load average: 2.86, 2.86, 1.52
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s): 99.8 us, 0.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root R 100.0 0.0 :46.35 stress
root R 100.0 0.0 :46.33 stress
root S 0.0 0.1 :13.31 systemd
root S 0.0 0.0 :00.01 kthreadd
------------------------引用来自---------------------------
https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587664&idx=1&sn=3f3185b9e5d55c8d0b9859340eecd860&chksm=8d3080c9ba4709df0b0bd72cb4fc8e9bf47bf2086823f44c0a6a758adc6cc7a0fafc399c911a&scene=21#wechat_redirect
第 4 章 容器 - 028 - 限制容器对CPU的使用的更多相关文章
- JAVA同步容器和并发容器
同步容器类 同步容器类的创建 在早期的JDK中,有两种现成的实现,Vector和Hashtable,可以直接new对象获取: 在JDK1.2中,引入了同步封装类,可以由Collections.sync ...
- 父容器根据子容器高度自适应:设置父容器 height:100%;overflow:hidden;
父容器根据子容器高度自适应:设置父容器 height:100%;overflow:hidden;
- C++学习基础四——顺序容器和关联容器
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...
- Java并发——同步容器与并发容器
同步容器类 早期版本的JDK提供的同步容器类为Vector和Hashtable,JDK1.2 提供了Collections.synchronizedXxx等工程方法,将普通的容器继续包装.对每个共有方 ...
- C++顺序性容器、关联性容器与容器适配器
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- IOC容器在web容器中初始化——(一)两种配置方式
参考文章http://blog.csdn.net/liuganggao/article/details/44083817,http://blog.csdn.net/u013185616/article ...
- spring容器和springmvc容器,以及web容器的关系
说到spring和springmvc,其实有很多人分不清他们有什么区别,认为它俩是一样的,如果你问他项目里用的什么MVC技术,他会说我们用的spring和mybatis,或者spring和hibern ...
- 结合源码浅谈Spring容器与其子容器Spring MVC 冲突问题
容器是整个Spring 框架的核心思想,用来管理Bean的整个生命周期. 一个项目中引入Spring和SpringMVC这两个框架,Spring是父容器,SpringMVC是其子容器,子容器可以看见父 ...
随机推荐
- linux下安装与部署redis
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...
- java的MVC与C#
Views: @{ Layout = "~/Views/Shared/_Layout.cshtml"; } @{ ViewBag.Title = "Index" ...
- BFS广度优先 vs DFS深度优先 for Binary Tree
https://www.geeksforgeeks.org/bfs-vs-dfs-binary-tree/ What are BFS and DFS for Binary Tree? A Tree i ...
- 为静态博客生成器WDTP移植了一款美美哒主题
前言 关于这个主题的移植后公布,我已经联系了主题作者并取得同意,这个主题是一夜涕所写的Sgreen,预览图见下 关于WDTP 就是一个很方便很便携很快速的cpp编写的带gui跨平台的开源的静态博客生成 ...
- 【字符串区别】SQLServer中char、varchar、nchar、nvarchar的区别:
一.定义 char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符 ...
- C# 截取 byte 字节 转字符串
byte[] byteArray = System.Text.Encoding.Default.GetBytes(content); Byte[] ThisByte = new Byte[1];Buf ...
- 深度学习课程笔记(八)GAN 公式推导
深度学习课程笔记(八)GAN 公式推导 2018-07-10 16:15:07
- 深度学习课程笔记(六)Error
深度学习课程笔记(六)Error Variance and Bias: 本文主要是讲解方差和偏差: error 主要来自于这两个方面.有可能是: 高方差,低偏差: 高偏差,低方差: 高方差,高偏差: ...
- (转)PaperWeekly 第二十二期---Image Caption任务综述
本文转自:http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247484014&idx=1&sn=4a053986f5 ...
- java 偏向锁,轻量锁,重量级锁
synchronized的执行过程: 1. 检测Mark Word里面是不是当前线程的ID,如果是,表示当前线程处于偏向锁 2. 如果不是,则使用CAS将当前线程的ID替换Mard Word,如果成功 ...