docker——docker容器内存和CPU使⽤限制
sudo docker run --name seckill0 -p 8080:8080 -m 1024M --cpus=0.2 -d seckill:v0
sudo docker run --name seckill1 -p 8081:8080 -m 1024M --cpus=0.2 -d seckill:v0
sudo docker run --name seckill2 -p 8082:8080 -m 1024M --cpus=0.2 -d seckill:v0
-m:限制内存使⽤为1G
--cpus:限制CPU使⽤的百分⽐
5、查看docker中容器占⽤宿主内存、CPU情况
docker stats
以下观点来⾃知乎
如果仅从占⽤计算资源、内存资源和存储资源的数量上考量,同⼀个服务以 docker 容器运⾏所占⽤的资源肯定多于在裸宿主机运⾏所占⽤的资源。但当服务变成分布式的时候,相同的⼀组服务在docker 容器上运⾏所占⽤的资源会显著少于裸宿主机运⾏时所占⽤的资源。
产⽣这⼀反认知现象的原因,是现在编写容器内运⾏服务的时候会对服务本⾝在设计时进⾏充分解耦,并⼤量采⽤⽆状态机设计,重构后的应⽤在容器环境中,能更充分的利⽤多核CPU的性能。
按照我在⼏个项⽬中的实验结果,在裸宿主机上采⽤多进程⽅式运⾏同⼀应⽤,当同时运⾏的进程达到内核的2.3倍左右就会出现服务响应延迟的现象,但采⽤容器化运⾏时,相同的应⽤封装在容器中,能够在3.4倍以下的配⽐稳定运⾏,且各应⽤没有响应延迟的现象。
在资源总量恒定的前提下,容器化后的应⽤相较于裸宿主机运⾏的更多,单个服务所占⽤的资源更少。
不少反⽽会多。在docker中运⾏还多了docker占⽤的资源。虽然docker是轻量级容器,但相⽐宿主还是多⽤了些许资源。那为什么还要⽤docker呢?
1. ⽅便快速扩展,例如⼀个web服务当访问量增加时候,只需要复制⼀个容器并且添加负载均衡即可,相⽐单机配置要快得多。
2. ⽅便快速开发,当⼀个服务依赖较多配置繁复时候,docker可以配置快速配置⼀个相同的环境,⽅便快速开发。
以下来⾃ CSDN 观点:
转⾃: blog.csdn/liu0808/article/details/106518217/
如何给分配内存和cpu?默认情况下,容器使⽤的资源是不受限制的。也就是可以使⽤主机内核调度器所允许的最⼤资源。但是在容器的使⽤过程中,经常需要对容器可以使⽤的主机资源进⾏限制,下⾯我们来介绍下。
容器CPU设置
默认设置下,所有容器可以平等地使⽤主机 CPU 资源并且没有限制。�0�2可以通过-c或–cpu-shares设置容器使⽤ CPU 的权重。如果不指定,默认值为 1024。
与内存限额不同,通过-c设置的 cpu share 并不是 CPU 资源的绝对数量,⽽是⼀个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的⽐例。通过 cpu share 可以设置容器使⽤ CPU 的优先级。
⽐如在 host 中启动了两个容器:
docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu
container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。
需要注意的是,这种按权重分配 CPU只会发⽣在 CPU资源紧张的情况下。如果 container_A 处于空闲状态,为了充分利⽤ CPU资
源,container_B 也可以分配到全部可⽤的 CPU。
容器内存限额
与操作系统类似,容器可使⽤的内存包括两部分:物理内存和 swap。 Docker 通过下⾯两组参数来控制容器内存的使⽤量。
-m 或 –memory:设置内存的使⽤限额,例如 100M, 2G。
–memory-swap:设置内存+swap 的使⽤限额。
当我们执⾏如下命令:
container容器用法docker run -m 200M --memory-swap=300M ubuntu
其含义是允许该容器最多使⽤ 200M 的内存和 100M 的 swap。默认情况下,上⾯两组参数为 -1,即对容器内存和 swap 的使⽤没有限制。下⾯我们使⽤ progrium/stress 镜像来为容器分配内存。该镜像可⽤于对容器执⾏压⼒测试。执⾏如下命令:
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
–vm 1:启动 1 个内存⼯作线程。
–vm-bytes 280M:每个线程分配 280M 内存。
如果让⼯作线程分配的内存超过 300M,分配的内存超过限额,stress 线程报错,容器退出。
如果在启动容器时只指定 -m ⽽不指定 –memory-swap,那么 –memory-swap 默认为 -m 的两倍,⽐如:
docker run -it -m 200M ubuntu
容器最多使⽤ 200M 物理内存和 200M swap。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论