限制容器对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

最新文章

  1. Html5下拉控件同时支持文本输入和下拉代码
  2. navicat怎么导出和导入数据表
  3. 个人开源作品,即时通讯App支持文本、语音、图片聊天
  4. Animating Views Using Scenes and Transitions
  5. [转]“WARNING: soft rlimits too low” in MongoDB with Mac OS X
  6. mvc中的webapi
  7. (转).net开发者对android第二周的学习体会
  8. Android中退出多个Activity的两个经典方法
  9. 谈一谈struts2和springmvc的拦截器
  10. HTML中的a标签实现点击下载
  11. 方法--printStackTrace()
  12. js生成1-100不重复的随机数及生成10个1-100不重复的随机数
  13. shell编程学习笔记(八):Shell中if判断的使用
  14. H5结合百度map实现GPS定位
  15. 前端之javascript的数据类型1和BOM对象
  16. 实验1 C语言开发环境使用和数据类型、运算符、表达式
  17. ORACLE学习笔记 translate,REGEXP_replace
  18. 获取platformVersion、deviceName、appPackage
  19. 【母函数】hdu2082 找单词
  20. java全栈day01-03注释、关键字与标识符

热门文章

  1. centos/rhel 7 几个最重要变化(systemd,firewalld,networkmanager,文件系统)
  2. Docker 配置
  3. NT1_keras下搭建一个3层模型并且修改。
  4. [error] 2230#2230: *84 client intended to send too large body: 1711341 bytes
  5. Django框架(八) Django之ORM数据库操作
  6. centos 编译lantrn
  7. R dataframe 列名包含减号,列名自动变为点
  8. Kubernetes之Controllers二
  9. 【NOI 2009】诗人小G
  10. windows下远程连接Mysql