|NO.Z.00019|——————————|CloudVirtualiZation|——|Cloud&资源限制.V02|——|CPU资源限制|

一、CPU资源限制
### --- CPU资源限制

~~~     Docker提供的COU资源限制选项可以在多核系统上限制容器能利用那些vCPU(虚拟CPU)。
~~~     而对容器最多能使用的CPU时间有两种限制范式(22线程(4CPU),48线程(8CPU),
~~~     816线程(16CPU))一是有多个CPU密集型(CPU密集型:说明CPU使用特别频繁)的
~~~     容器竞争CPU时,设置各个容器能使用的CPU时间相对比例
~~~     而是以绝对的方式设置容器在每个调度周期内最多使用的CPU时间
二、CPU限制方式
### --- CPU限制方式

~~~     --cpuset-cpus=""   允许使用的CPU集,值为0-30,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:能够使用的CPU2CPU,显示的结果是200%  
~~~     --cpu 8:使用8个不同的线程去跑我们的CPU资源
docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8 
~~~     注:CPU201.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:表示能够使用的第几个CPU0代表DPU,第一个CPU100%去浮动CPU资源
### --- --cpu 8:使用8个不同的线程去跑我们的CPU资源
docker run --name stress -it --rm  --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
~~~     110.93%CPU100%左右浮动

[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

 

 

posted on   yanqi_vip  阅读(32)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示