首页 > 系统相关 >二. Docker 资源限制介绍,以及在容器上进行cpu与内存资源限制的方法-2

二. Docker 资源限制介绍,以及在容器上进行cpu与内存资源限制的方法-2

时间:2022-11-27 13:44:05浏览次数:44  
标签:容器 限制 -- 0.0 cpu 内存 docker Docker


容器资源限制: Docker 可以强制执行硬性内存限制,即只允许容器使用给定的内存大小。 Docker 也可以执行非硬性内存限制,即容器可以使用尽可能多的内存,除非内核检测到主机上的内存不够用了。大部分的选项取正整数,跟着一个后缀b,k, m,g,,表示字节,千字节,兆字节或千兆字节。  Most of these options take a positive integer, followed by a suffix of b, k, m, g, to indicate bytes, kilobytes, megabytes, or gigabytes. --oom-score-adj #宿主机kernel对进程使用的内存进行评分,评分最高的将被宿主机内核kill掉(越低越不容易被kill),可以指定一个 容器的评分为较低的负数,但是不推荐手动指定。 --oom-kill-disable #对某个容器关闭oom机制。  
物理内存限制参数:  -m or --memory #限制容器可以使用的最大内存量,如果设置此选项,最小存值为4m(4兆字节)。 --memory-swap #容器可以使用的交换分区大小,必须要在设置了物理内存限制的前提才能设置交换分区的限制 --memory-swappiness #设置容器使用交换分区的倾向性,值越高表示越倾向于使用swap分区,范围为0-100,0为能不用就不用,100为能用就用。 --kernel-memory #容器可以使用的最大内核内存量,最小为4m,由于内核内存与用户空间内存隔离,因此无法与用户空间内存直接交换,因此内核内存不足的容器可能会阻塞宿主主机资源,这会对主机和其他容器或者其他服务进程产生影响,因此不要设置内核内存大小。 --memory-reservation #允许指定小于--memory的软限制,当Docker检测到主机上的争用或内存不足时会激活该限制,如果使用--memory-reservation,则必须将其设置为低于--memory才能使其优先。 因为它是软限制,所以不能保证容器不超过限制。 --oom-kill-disable #默认情况下,发生OOM时,kernel会杀死容器内进程,但是可以使用--oom-kill-disable参数,可以禁止oom发生在指定的容器上,即 仅在已设置-m / - memory选项的容器上禁用OOM,如果-m 参数未配置,产生OOM时,主机为了释放内存还会杀死系统进程。  
物理内存限制验证: 假如一个容器未做内存使用限制,则该容器可以利用到系统内存最大空间,默认创建的容器没有做内存资源限制。 # docker pull lorel/docker-stress-ng #测试镜像 # docker run -it --rm lorel/docker-stress-ng --help #查看帮助信息 1、不限制容器内存:  启动两个内存工作进程,每个内存工作进程最大允许使用内存256M,且宿主机不限制当前容器最大内存:  root@docker-server1:~# docker run -it --rm --name magedu-c1 lorel/docker-stress-ng --vm 2 --vm-bytes 256M  root@docker-server1:~# docker stats 2、限制容器最大内存: root@docker-server1:~# docker run -it --rm -m 256m --name magedu-c1 lorel/docker-stress-ng --vm 2 --vmbytes 256M root@docker-server1:~# docker stats      
CPU限制验证:  #只给容器分配最多两核宿主机CPU利用率  # docker run -it --rm --name magedu-c1 --cpus 2 lorel/docker-stress-ng --cpu 4 --vm 4 注:CPU资源限制是将分配给容器的2核心分配到了宿主机每一核心CPU上,也就是容器的总CPU值是在宿主机的每一个核心CPU分配了部分比例。  Tasks: 288 total, 10 running, 278 sleeping, 0 stopped, 0 zombie  %Cpu0 : 51.2 us, 0.0 sy, 0.0 ni, 48.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st  %Cpu1 : 26.4 us, 23.4 sy, 0.0 ni, 50.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st  %Cpu2 : 23.1 us, 27.7 sy, 0.0 ni, 49.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st  %Cpu3 : 18.3 us, 31.3 sy, 0.0 ni, 50.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st  将容器运行到指定的CPU上:  # docker run -it --rm --name magedu-c1 --cpus 2 --cpuset-cpus 1,3 lorel/docker-stress-ng --cpu 4 --vm 4  基于cpu--shares值(共享值)对CPU进行限制,分别启动两个容器,magedu-c1的--cpu-shares值为1000,magedu-c2的--cpu-shares为500,观察最终效果,--cpu-shares值为1000的magedu-c1的CPU利用率基本是--cpu-shares为500的magedu-c2的两倍:  # docker run -it --rm --name magedu-c1 --cpu-shares 1000 lorel/docker-stress-ng --cpu 4 --vm 4 # docker run -it --rm --name magedu-c2 --cpu-shares 500 lorel/docker-stress-ng --cpu 4 --vm 4    
验证:  1.cgroup验证:  root@docker-server1:~# cat /sys/fs/cgroup/docker/b7b3755f22962538418dc56c23c03941cd7f97178ed8e25c7d02fbc4ca9878ed/memory.max  536870912  root@docker-server1:~# cat /sys/fs/cgroup/docker/b7b3755f22962538418dc56c23c03941cd7f97178ed8e25c7d02fbc4ca9878ed/cpu.max  200000 100000 2.systemd限制验证:  root@docker-server1:~# docker start b7b3755f2296b7b3755f2296  root@docker-server1:~# ps -ef | grep nginx #过滤出目的服务的进程号  root 18770 18736 1 17:08 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 18816 18770 0 17:08 ? 00:00:00 nginx: worker process root@docker-server1:~# cat /proc/18770/cpuset #查询进程的限制  /system.slice/docker-b7b3755f22962538418dc56c23c03941cd7f97178ed8e25c7d02fbc4ca9878ed.scope root@docker-server1:~# cat /sys/fs/cgroup/system.slice/docker- b7b3755f22962538418dc56c23c03941cd7f97178ed8e25c7d02fbc4ca9878ed.scope/cpu.max #查询cpu限制范围 200000 100000 root@docker-server1:~# cat /sys/fs/cgroup/system.slice/docker- b7b3755f22962538418dc56c23c03941cd7f97178ed8e25c7d02fbc4ca9878ed.scope/memory.max #查询内存限制范围  536870912     # docker run -it -d  -m 512m --cpus 2  -p 80:80  nginx:1.20.2-alpine

标签:容器,限制,--,0.0,cpu,内存,docker,Docker
From: https://www.cnblogs.com/pang-lu/p/16929544.html

相关文章