第 4 章 容器 - 028 - 限制容器对CPU的使用
2024-09-20 01:50:26
限制容器对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
最新文章
- Html5下拉控件同时支持文本输入和下拉代码
- navicat怎么导出和导入数据表
- 个人开源作品,即时通讯App支持文本、语音、图片聊天
- Animating Views Using Scenes and Transitions
- [转]“WARNING: soft rlimits too low” in MongoDB with Mac OS X
- mvc中的webapi
- (转).net开发者对android第二周的学习体会
- Android中退出多个Activity的两个经典方法
- 谈一谈struts2和springmvc的拦截器
- HTML中的a标签实现点击下载
- 方法--printStackTrace()
- js生成1-100不重复的随机数及生成10个1-100不重复的随机数
- shell编程学习笔记(八):Shell中if判断的使用
- H5结合百度map实现GPS定位
- 前端之javascript的数据类型1和BOM对象
- 实验1 C语言开发环境使用和数据类型、运算符、表达式
- ORACLE学习笔记 translate,REGEXP_replace
- 获取platformVersion、deviceName、appPackage
- 【母函数】hdu2082 找单词
- java全栈day01-03注释、关键字与标识符
热门文章
- centos/rhel 7 几个最重要变化(systemd,firewalld,networkmanager,文件系统)
- Docker 配置
- NT1_keras下搭建一个3层模型并且修改。
- [error] 2230#2230: *84 client intended to send too large body: 1711341 bytes
- Django框架(八) Django之ORM数据库操作
- centos 编译lantrn
- R dataframe 列名包含减号,列名自动变为点
- Kubernetes之Controllers二
- 【NOI 2009】诗人小G
- windows下远程连接Mysql