docker19.03限制容器使用的cpu資源


一,用--cpus限制可用的cpu個數

例子:

[root@localhost liuhongdi]# docker run -idt --name kafka1 --hostname kafka1 --cpus=0.3 --privileged kafka:0.1 /usr/sbin/init

此處限定了可用cpu個數為0.3

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

 說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,登錄進入后,安裝stress

說明:el8的源里面還沒有,先用el7的試試

[root@kafka1 source]# wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/stress-1.0.4-16.el7.x86_64.rpm

[root@kafka1 source]# rpm -ivh stress-1.0.4-16.el7.x86_64.rpm 

 

三,測試--cpus對cpu的限制是否起作用

1,

在容器內執行stress,創建四個消耗 CPU 資源的進程

[root@kafka1 source]# stress -c 4

2,

在宿主機上執行top,查看cpu使用率

[root@localhost liuhongdi]# top
top - 16:18:34 up  2:01,  1 user,  load average: 0.02, 0.07, 0.08
Tasks: 297 total,   5 running, 292 sleeping,   0 stopped,   0 zombie
%Cpu0  : 14.6 us,  0.0 sy,  0.0 ni, 84.8 id,  0.0 wa,  0.3 hi,  0.3 si,  0.0 st
%Cpu1  : 13.7 us,  0.3 sy,  0.0 ni, 85.7 id,  0.0 wa,  0.3 hi,  0.0 si,  0.0 st

可以發現stress占用了大約30%的cpu,

每顆cpu上大約15%左右,基本上平均的分布在每顆cpu上面

3,

用docker stats檢查:

[root@localhost liuhongdi]# docker stats kafka1 --no-stream
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
db7b125a944f        kafka1              29.64%              67.75MiB / 3.67GiB   1.80%               20.9MB / 599kB      79MB / 5.57MB       10

CPU %的值29.64%,基本上跑滿了,說明容器對cpu的限制起作用

 

4,cpus的限制,可以從inspect中查看:

[root@localhost liuhongdi]# docker update --cpus=2 kafka2
kafka2
[root@localhost liuhongdi]# docker inspect kafka2 | grep -i NanoCpus
            "NanoCpus": 2000000000,

[root@localhost liuhongdi]# docker update --cpus=0.5 kafka2
kafka2
[root@localhost liuhongdi]# docker inspect kafka2 | grep -i NanoCpus
            "NanoCpus": 500000000,

 

四,使用--cpuset-cpus參數可以指定使用固定的某一顆或幾顆cpu

1, 

例子:當我們有2顆cpu時,id分別是:0,1

          我們指定容器只使用第0顆cpu

看例子:我們用 --cpuset-cpus指定要使用的cpu是第0顆

[root@localhost liuhongdi]# docker run -idt --name kafka1 --hostname kafka1 --cpuset-cpus="0" --privileged kafka:0.1 /usr/sbin/init
3e3c43759030fd1db5031ef0b9e7b0a34fdb3a0900520d3e3d265056bf49c33d

2,登錄進入,用stress測試

[root@localhost liuhongdi]# docker exec -it kafka1 /bin/bash
[root@kafka1 source]# stress
-c 4

3,

用docker stats查看:

[root@localhost liuhongdi]# docker stats kafka1 --no-stream
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
3e3c43759030        kafka1              97.51%              54.84MiB / 3.67GiB   1.46%               12.6MB / 240kB      19.7MB / 1.04MB     10

可以看到cpu已跑滿到接近100%

4,

top中可以看到兩顆cpu使用情況的不同:

[root@localhost liuhongdi]# top
top - 16:33:14 up  2:15,  1 user,  load average: 2.94, 1.19, 0.50
Tasks: 303 total,   6 running, 297 sleeping,   0 stopped,   0 zombie
%Cpu0  : 96.3 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  3.3 hi,  0.3 si,  0.0 st
%Cpu1  :  6.7 us,  1.3 sy,  0.0 ni, 91.6 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st

5, 

如何查看當前的配置:

[root@localhost liuhongdi]# docker inspect kafka1 | grep CpusetCpus
            "CpusetCpus": "0",

6,

如果指定多顆cpu,格式如下:

docker run -it --rm --cpuset-cpus="1,3" u-stress:latest /bin/bash

 

五,查看docker的版本:

[root@localhost liuhongdi]# docker --version
Docker version 19.03.8, build afacb8b

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM