Docker 容器资源管理,你真的学会了吗?( 二 )
现在我们回到刚才启动的容器,执行以下命令:
sha256sum /dev/zero
sha256sum 是一个用于计算和检查 SHA256 信息的命令行工具;/dev/zero 是 Linux 系统上一个特殊的设备,在读它时,它可以提供无限的空字符串(NULL 或者 0x00 之类的) 。所以上面的命令,会**让 sha256sum 持续地读 /dev/zero 产生的空串,并进行计算 。**这将迅速地消耗 CPU 资源 。
我们来看看此时容器的资源使用情况:
(MoeLove)~ docker stats --no-stream $(docker ps -ql)CONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDS106a24399bc9friendly_varahamihira100.59%1.5MiB / 15.56GiB0.01%14.4kB /0B1.99MB / 0B2(MoeLove)~ docker top $(docker ps -ql) -o pid,c,cmdPIDCCMD8250/bin/sh96599sha256sum /dev/zero
可以看到当前的 CPU 使用率已经在 100% 左右了 。
我们再新打开一个窗口,进入容器内,执行相同的命令:
(MoeLove)~ docker exec -it $(docker ps -ql) sh/ # sha256sum /dev/zero
查看容器使用资源的情况:
(MoeLove)~ docker stats --no-stream $(docker ps -ql)CONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDSf359d4ff6fc6nice_zhukovsky200.79%1.793MiB / 15.56GiB0.01%4.58kB /0B0B / 0B4(MoeLove)~ docker top $(docker ps -ql) -o pid,c,cmd PIDCCMD8250/bin/sh96599sha256sum /dev/zero12360sh129799sha256sum /dev/zero
可以看到现在两个进程,已经让两个 CPU 满负载运行了 。这里需要额外说明的是,选择 sha256sum 作为示例,是因为它是单线程程序,每次启动一个 sha256sum 并不会消耗其他 CPU 核的资源 。
由此可以得出的结论是,如果不对容器内程序进行 CPU 资源限制,其可能会消耗掉大量 CPU 资源,进而影响其他程序或者影响系统的稳定 。
分配 0.5 CPU
那接下来,我们对这个容器进行 CPU 资源的限制,比如限制它只可以使用 0.5 CPU 。
(MoeLove)~ docker update --cpus "0.5" $(docker ps -ql)f359d4ff6fc6
我们可以重新启动一个容器,在 docker run 时,为它添加资源限制 。
但我来给你介绍一种动态更改资源限制的办法,使用 docker update 命令 。例如,在此例子中,我们使用如下命令,限制该容器只能使用 0.5 CPU 。
为了方便,我们直接关闭刚才的 sha256sum 进程,按 Ctrl+c 终止进程 。然后重新运行该命令:
# 终止进程/ # sha256sum /dev/zero^C# 启动程序/ # sha256sum /dev/zero
查看资源占用情况:
(MoeLove)~ docker stats --no-stream $(docker ps -ql)CONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDSf359d4ff6fc6nice_zhukovsky49.87%1.777MiB / 15.56GiB0.01%112kB /0B1.59MB / 0B3(MoeLove)~ docker top $(docker ps -ql) -o pid,c,cmdPIDCCMD8250/bin/sh12360sh766249sha256sum /dev/zero
可以看到,该进程使用了 50% 左右的 CPU 。我们接下来再启动另一个 sha256sum 的进程:
/ # sha256sum /dev/zero
查看资源使用情况:
(MoeLove)~ docker stats --no-stream $(docker ps -ql)CONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDSf359d4ff6fc6nice_zhukovsky50.92%1.891MiB / 15.56GiB0.01%113kB /0B1.59MB / 0B4(MoeLove)~ docker top $(docker ps -ql) -o pid,c,cmdPIDCCMD8250/bin/sh12360sh
可以看到,该容器整体占用了 50% 的 CPU,而其中的两个 sha256sum 进程则各占了 25% 。
我们已经成功的按预期为它分配了 0.5 CPU 。
分配 1.5 CPU
接下来,重复上述步骤,但是为它分配 1.5 CPU,来看看它的实际情况如何 。
# 更新配置,使用 1.5 CPU(MoeLove)~ docker update --cpus "1.5"$(docker ps -ql)f359d4ff6fc6
分别使用之前的两个窗口,执行 sha256sum /dev/zero 进行测试:
/ # sha256sum /dev/zero
查看资源使用情况:
(MoeLove)~ docker stats --no-stream $(docker ps -ql)CONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDSf359d4ff6fc6nice_zhukovsky151.23%2MiB / 15.56GiB0.01%122kB /0B1.59MB / 0B4(MoeLove)~ docker top $(docker ps -ql) -o pid,c,cmdPIDCCMD8250/bin/sh12360sh2516777sha256sum /dev/zero2521174sha256sum /dev/zero
可以看到,结果与我们的预期基本相符,150% 左右的 CPU,而两个测试进程,也差不多是平分了 CPU 资源 。
指定可使用 CPU 核
可以使用 --cpuset-cpus 来指定分配可使用的 CPU 核,这里我指定为 0,表示使用第一个 CPU 核 。
(MoeLove)~ docker update --cpus "1.5" --cpuset-cpus 0$(docker ps -ql)f359d4ff6fc6
分别使用之前的两个窗口,执行 sha256sum /dev/zero 进行测试:
/ # sha256sum /dev/zero
查看资源情况:
(MoeLove)~ docker stats --no-stream $(docker ps -ql)CONTAINER IDNAMECPU %MEM USAGE / LIMITMEM %NET I/OBLOCK I/OPIDSf359d4ff6fc6nice_zhukovsky99.18%1.988MiB / 15.56GiB0.01%221kB /0B 1.59MB / 0B4(MoeLove)~ docker top $(docker ps -ql) -o pid,c,cmdPIDCCMD8250/bin/sh12360sh2511950sha256sum /dev/zero2516448sha256sum /dev/zero
推荐阅读
- 人力资源管理|一本非常值得考的证书:企业人力资源管理师!
- 人力资源管理师考试介绍 人力资源助理考试
- 电容器介绍 什么是电容器
- 空调电容器(如何测量空调电容好坏)
- 如何快速的打开Windows资源管理器
- 人力资源管理专业详解 人力资源管理做什么?
- docker-compose用法详解
- 人力资源管理者应具备哪些能力?
- 鼠疫|人力资源管理师,升职加薪,快来报考吧
- 坚持节水优先强化水资源管理的标语 坚持节水优先强化水资源管理