linux怎么查看本机内存大小
315
2022-10-21
云计算-11-Docker容器对CPU、memory的资源配置
云计算-11-Docker容器对CPU、memory的资源配置
简述
在使用docker容器的时候,默认是不对容器进行硬件资源限制的,同一台机器上的容器虽然相互隔离,但是他们底层的CPU、内存和磁盘资源是相同的,如果不对容器使用的资源进行限制,那么容器之间的相互影响,就可能会导致主机和集权资源耗尽,导致容器服务不可用。因此docker作为容器的管理者,需要对容器的资源进行限制:包括CPU、内存、磁盘三个方面。
Linux 查看CPU和内存信息指令
查看CPU信息
cat /proc/cpuinfo
查看CPU的型号信息
[root@k8s1-zb ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 4 Intel Xeon E3-12xx v2 (Ivy Bridge)
表示有4个CPU,和这四个CPU的型号
查看CPU的组成
[root@k8s1-zb ~]# cat /proc/cpuinfo | grep physical | uniq -c 1 physical id : 0 1 address sizes : 46 bits physical, 48 bits virtual 1 physical id : 1 1 address sizes : 46 bits physical, 48 bits virtual 1 physical id : 2 1 address sizes : 46 bits physical, 48 bits virtual 1 physical id : 3 1 address sizes : 46 bits physical, 48 bits virtual
表示4个单核CPU组成
获取CPU的运行模式
[root@k8s1-zb ~]# getconf LONG_BIT64
说明现在的CPU运行在64bit模式下。
查看内存信息
cat /proc/meminfo
查看操作系统内核
[root@k8s1-zb ~]# uname -aLinux k8s1-zb 3.10.0-862.3.2.el7.x86_64 #1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
查看内存总量
grep MemTotal /proc/meminfo
查看空闲内存量
grep MemFree /proc/meminfo
docker限制容器CPU
--cpu-shares设置容器按比例弹性共享CPU资源
查看--cpu-shares的指令信息
[root@k8s1-zb ~]# docker run --help | grep cpu-shares -c, --cpu-shares int CPU shares (relative weight)
--cpu-shares并不能保证容器在运行的时候可以获取多少个CPU资源,只是一个弹性权值。
默认情况下每个容器CPU弹性权值都是1024,只有在同一个CPU核心上面,同时运行多个容器才能看出CPU权值效果。
举例说明:
容器C和D的CPU权值分别为1024和2048,会怎么分配CPU资源?
情景1:C和D容器都正常运行,如果占用同一个CPU,那么在CPU时间片分配时,容器D会比容器C多一倍的机会获取CPU时间片。情景2:容器CPU资源分配结果和其他容器 运行状态有关。如果容器D一直空闲,那么容器C也可以获取比容器D更多的CPU时间片。cgroups只有在多个容器争夺同一个CPU资源的时候,CUP配额才会生效,不能只根据CPU的权值配额类确定CPU的资源占有情况,容器CPU的资源分配情况,取决于同时运行的其他容器CPU的分配和容器中进行运行情况。
举例1
创建容器mycentos1,分配1024的cpu权值,并进入容器
docker run --name mycentos1 --cpu-shares 1024 -it centos /bin/bash
查看容器分配的CPU权值
[root@87476ea8bd94 /]# cat /sys/fs/cgroup/cpu/cpu.shares1024
注:--cpu-shares设置的并不是CPU绝对资源,只是一个相对权重,容器最终能够分配到多少CPU资源,和其他所有容器运行情况以及cpu shares 总和比例有关系。cpu share只是设置了CPU使用的优先级。
--cpuset容器绑定CPU
查看--cpuset的指令信息
[root@k8s1-zb ~]# docker run --help | grep cpuset --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) --cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--cpuset可以在容器运行时将容器和宿主机的CPU进行对应绑定,从而控制容器运行CPU个数和Z在那个CPU上运行。主要对多CPU、多内存节点服务器有用
举例1
创建mycentos1容器,cpu权值1024,只允许在宿主机的cpu1和cpu0上运行
docker run -it --name mycentos1 --cpu-shares 1024 -v /etc/yum.repos.d:/etc/yum.repos.d --cpuset-cpus 0,1 centos /bin/bash
重新打开一个终端创建容器mycentos2,cpu权值2048,只允许在宿主机的cpu1和cpu0上运行
docker run -it --name mycentos1 --cpu-shares 2048-v /etc/yum.repos.d:/etc/yum.repos.d --cpuset-cpus 0,1 centos /bin/bash
分别在两个容器mycentos1和mycentos2上安装stress压力测试
yum install -y epel-release # 安装epel扩展源 yum -y install stress #安装stress命令
分别在两个容器中使用stress命令,将CPU占满
stress -c 2 -v -t 10m #表示在容器中运行2个进程
再打开一个终端,输入top指令,然后按1快捷键
发现CPU0和CPU1已经占满,mycentos2容器使用CPU是mycentos1容器使用CPU的2倍。说明资源限制成功。
docker限制容器内存
-m限制容器内存
docker提供-m,--memory限制容器内存使用量, 查看--memory的指令信息
docker run --help | grep memory -m, --memory bytes Memory limit --memory-reservation bytes Memory soft limit --memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap --memory-swappiness int Tune container memory swappiness (0 to 100) (default -1)
举例1
创建一个只允许容器内存最多使用128M
docker run --name mycentos3 -it -m 128M centos /bin/bash
查看容器的内存限制
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
举例2
创建一个容器mycentos4,只是用1个CPU核心,只是要256M内存
docker run --name mycentos4 --cpuset-cpus 0 -it -m 128M centos /bin/bash
docker限制容器IO
--device-write-bps限制容器在设备上的写速度
--device-write-bps限制容器在设备上的写速度,单位是kb,mb,gb
查看--device-write-bps指令信息
[root@k8s1-zb ~]# docker run --help | grep write-b --device-write-bps list Limit write rate (bytes per second) to a device (default [])
举例
创建一个容器mycentos5
--device 将主机设备添加到容器
docker run -it --name mycentos5 -v /mydata/test:/mydata/test --device /dev/vda:/dev/vda --device-write-bps /dev/vda:2mb centos /bin/bash
注:**/dev/vda根据实际情况进行修改自己的硬盘(/dev/sda是在STAT、SCSI第一个接口上的硬盘),可以根据命令查看硬盘分区**
fdisk -l
使用time+dd测试硬盘读写速度
time dd if=/dev/vda of=/mydata/test/test.out bs=2M count=50 oflag=direct,nonblock
使用time+dd测试硬盘读写速度
time dd if=/dev/vda of=/dev/null bs=2M count=50
这是因为/dev/vad是一个物理分区,对他读取产生IO,/dev/null是伪设备,不会产生写IO,因此这个命令只测试读能力
我们能发现读能力是1.5GB/S不像写能力那样进行了限制。
--device-read-bps限制容器在设备上的读能力
--device-read-bps限制容器在设备上的读速度,单位是kb,mb,gb
查看 --device-read-bps指令信息
[root@k8s1-zb ~]# docker run --help | grep read --device-read-bps list Limit read rate (bytes per second) from a device (default [])
举例
创建一个容器mycentos6
--device 将主机设备添加到容器
docker run -it --name mycentos6 -v /mydata/test:/mydata/test --device /dev/vda:/dev/vda --device-read-bps /dev/vda:2mb centos /bin/bash
要测试读能力我们首先需要生成读取数据文件test.out。
time dd if=/dev/zero of=test.out bs=2M count=10
然后再运行dd命令,对容器读取数据速度进行测试,和–device-write-bps类似,iflag=direct是对–device-read-bps的读取速度进行限制。
time dd if=test.out of=/dev/zero bs=2M iflag=direct
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~