|NO.Z.00019|——————————|CloudVirtualiZation|——|Cloud&资源限制.V02|——|CPU资源限制|
一、CPU资源限制
### --- CPU资源限制
~~~ Docker提供的COU资源限制选项可以在多核系统上限制容器能利用那些vCPU(虚拟CPU)。
~~~ 而对容器最多能使用的CPU时间有两种限制范式(2核2线程(4个CPU),4核8线程(8个CPU),
~~~ 8核16线程(16个CPU))一是有多个CPU密集型(CPU密集型:说明CPU使用特别频繁)的
~~~ 容器竞争CPU时,设置各个容器能使用的CPU时间相对比例
~~~ 而是以绝对的方式设置容器在每个调度周期内最多使用的CPU时间
二、CPU限制方式
### --- CPU限制方式
~~~ --cpuset-cpus="" 允许使用的CPU集,值为0-3,0,1
~~~ --c --cpu-shares=0 CPU共享权值(相对权重),默认值为1024
~~~ --cpuser-mems“” 允许在上执行的内存节点(MEMS)
~~~ --cpu-period=0 即可设置调度周期,CFS周期的有效范围是1ms~1s,
~~~ 对应的--cpu-period的数值范围是1000~1000000
~~~ --cpu-quota=0 设置在每个周期内容器能使用的CPU时间,
~~~ 容器的CPU配额必须不小于1ms即-cpu-quota的值必须 >= 1000,单位微妙
### --- Example
~~~ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:16.04 /bin/bash
~~~ 注:--cpu-period=50000表示一个调度周期为50000,
~~~ 注:--cpu-quote=25000一个调度周期内部能够使用的CPU时间为25000,
~~~ 注:也就意味着能够使用的CPU一半的时间
~~~ docker run -it --cpu-period=10000 --cpu-quota=20000 ubuntu:16.04 /bin/bash
~~~ 注:--cpu-period=10000 --cpu-quota=20000表示一个不够,
~~~ 注:两个来凑,在一个分配时间内,我能同时使用两个百分之百两个CPU时间
~~~ --cpus 能够限制容器可以使用的主机CPU个数,并且换可以指定如1.5之类的小数
~~~ # NUMA:
~~~ 非统一内存访问(NUMA)是一种用于多处理器的电脑记忆体设计,
~~~ 内存访问时间取决于处理器的内存位置,
~~~ 在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器
~~~ (存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。
三、限制实验
### --- 限制实验
docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2
docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8
docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
### --- stress这是一个Java编写的程序;做测试的用的比较多,做压测的话还是比较好。
### --- stress可以无限制的去占用的CPU和内存资源,
docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2
~~~ --rm:容器一旦退出被删除;
~~~ -m:表示设置应限制的的内存大小为256m;
~~~ lorel/docker-stress-ng:latest:镜像名称;stress是镜像里面的命令;
~~~ -vm 2:表示用两个进程去消耗内存的进程去执行,若内存分配的更多的话可以设置更高的值。
~~~ 255.9 MiB / 256 MiB:-m参数的含义限制使用的资源数
[root@hub ~]# docker rm -f $( docker ps -a -q )
[root@hub ~]# docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2 //启动stress容器
Unable to find image 'lorel/docker-stress-ng:latest' locally
latest: Pulling from lorel/docker-stress-ng // 查看它消耗的资源
[root@hub ~]# docker stats stress // -m参数背后的系统资源
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
stress 15.51% 255.9 MiB / 256 MiB 99.95% 656 B / 656 B 76.6 MB / 3.1 GB 5
### --- --cpus 2:能够使用的CPU,2个CPU,显示的结果是200%
~~~ --cpu 8:使用8个不同的线程去跑我们的CPU资源
docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8
~~~ 注:CPU:201.61%。是一个动态调动过程,CPU理论上应该是200%
[root@hub ~]# docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8
stress-ng: info: [1] defaulting to a 86400 second run per stressor
[root@hub ~]# docker stats stress
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
stress 201.61% 31.6 MiB / 3.7 GiB 0.83% 656 B / 656 B 0 B / 0 B 9
### --- --cpuset-cpus 0:表示能够使用的第几个CPU,0代表DPU,第一个CPU,100%去浮动CPU资源
### --- --cpu 8:使用8个不同的线程去跑我们的CPU资源
docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
~~~ 110.93%:CPU在100%左右浮动
[root@hub ~]# docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
[root@hub ~]# docker stats stress
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
stress 110.93% 33.73 MiB / 3.7 GiB 0.89% 656 B / 656 B 0 B / 0 B 9
### --- 相对权重调度有关
~~~ CPU200%的 去运行
[root@hub ~]# docker run --name stress -it --rm --cpu-period=10000 --cpu-quota=20000 lorel/docker-stress-ng:latest stress --cpu 12
[root@hub ~]# docker stats stress // CPU200%的 去运行
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
stress 200.85% 36.85 MiB / 3.7 GiB 0.97% 656 B / 656 B 0 B / 0 B 13
~~~ 50.36%CPU在50%左右浮动
[root@hub ~]# docker run --name stress -it --rm --cpu-period=50000 --cpu-quota=25000 lorel/docker-stress-ng:latest stress --cpu 12
[root@hub ~]# docker stats stress
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
stress 50.36% 26.05 MiB / 3.7 GiB 0.69% 586 B / 586 B 0 B / 0 B 13
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv011-docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」