一,用--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