Docker容器技术应用 实验指导书 任务7.2.2 限制CPU内核、内存和Block IO.docx
任务7.2.2限制CPU内核、内存和BlockIO
(1)任务目标
掌握限制CPU内核、内存和BlockIO的方法
(2)任务内容
限制CPU内核
限制内存
限制BlockIO
(3)完成任务所需的设备和软件
一台安装Windows10操作系统的计算机
VMwareWorkstation,Docker
远程管理工具MobaXterm
(4)任务实施步骤
第一步:对于多核服务器,设置容器运行所使用的CPU内核,操作命令如下:
[root@docker~]#dockerrun-itd--namecontainer4--cpuset-cpus0-1centos:stress
--cpuset-cpus:指定容器可以使用的CPU内核。
[root@docker~]#dockerps-a
[root@docker~]#dockerexec-itcontainer4bash
[root@bcb54cf525ef/]#cat/sys/fs/cgroup/cpuset/cpuset.cpus
命令运行结果如图7-8所示:
图7-8对于多核服务器设置容器运行所使用的CPU内核
第二步:查看容器内所有进程,将容器内进程与CPU内核进行绑定,操作命令如下:
[root@docker~]#dockerexeccontainer4psaux
[root@docker~]#dockerexeccontainer4taskset-cp1
-c:以列表格式显示和指定CPU。
-p:在已经存在的pid上操作。
1:容器内第一个进程编号。
[root@docker~]#dockerexeccontainer4taskset-cp01
0:第一个CPU内核编号。
1:容器内第一个进程编号。
命令运行结果如图7-9所示:
图7-9将容器进程与CPU内核进行绑定
第三步:在同一个CPU内核上运行两个容器,分别开启一个stress进程,设置两个进程的CPU份额为1:2,操作命令如下:
[root@docker~]#dockerrun-itd--namecontainer5--cpuset-cpus1--cpu-shares521centos:stressstress-c1
[root@docker~]#dockerrun-itd--namecontainer6--cpuset-cpus1--cpu-shares1024centos:stressstress-c1
[root@docker~]#dockerps-a
[root@docker~]#dockerexec-itcontainer5bash
[root@adce81285bc2/]#top
[root@adce81285bc2/]#exit
[root@docker~]#dockerexec-itcontainer6bash
[root@2538d8621bd6/]#top
命令运行结果如图7-10、7-11所示:
图7-10在同一个CPU内核上运行两个容器
图7-11在同一个CPU内核上运行两个容器
从图中可以看出,第二个CPU内核的资源已耗尽,使用率为100%。两容器的CPU份额为1:2。
第四步:拉取对容器执行压力测试的镜像progrium/stress,分配容器内存,操作命令如下:
[root@docker~]#dockerrun-it--namecontainer7-m128M--memory-swap=256Mprogrium/stress--vm1--vm-bytes220M
-m或--memory:设置内存的使用限额。
--memory-swap:设置交换分区的使用限额。
--vm1:启动一个内存工作线程。
--vm-bytes220M:为每个线程分配220MB内存。
命令运行结果如图7-12所示:
图7-12分配容器内存,线程工作正常
分配给线程的220MB内存小于256MB,从图中可见,工作线程运行正常。当分配给线程的内存为300MB时,操作命令如下:
[root@docker~]#dockerrun-it--namecontainer8-m128M--memory-swap=256Mprogrium/stress--vm1--vm-bytes300M
命令运行结果如图7-13所示:
图7-13分配容器内存,线程报错
从图中可见,当分配给线程的内存为300MB大于256MB时,线程报错,容器退出。
第五步:查看容器写速率,