docker快速入门6-资源限制及验证

网友投稿 279 2022-10-27

docker快速入门6-资源限制及验证

docker快速入门6-资源限制及验证

默认情况下容器中运行的程序可以尽可能吃掉宿主机的CPU、Memory以及IO资源。

CPU资源是可压缩性资源,Memory是非压缩性资源。是否可压缩性表现为当该资源被占用完时,再有其他程序向内核索要时,压缩性资源就会让其等待直到有资源分配后分配给它;非压缩性资源则会直接抛异常。

在Linux主机上,假如内核探测到没有足够的内存资源来运行重要的系统函数时,就会抛出一个OOME(Out Of Memory Exception),并且开始Kill掉一些进程来释放内存资源。一旦发生OOME,任何进程都有可能被杀死,包括docker daemon在内。为此,Docker特地调整了docker daemon的OOM优先级,以免它被内核杀掉,但容器的优先级并未被调整。

限制内存使用

-m Or --memory= 限制分配ram(物理内存)大小

--memory-swap 必须先设置-m

--memory-swap --memory 功能
正数S 正数M 容器可用总空间为S,其中ram为M,swap为(S-M),若S=M,则无可用swap资源
0 正数M 相当于未设置swap(unset)
unset 正数M 若主机(Docker Host)启用了swap,则容器的可用swap为2*M。(一般情况下主机都会禁用swap)
-1 正数M 若主机(Docker Host)启用了swap,则容器可使用最大至主机上的所有swap空间的swap的资源。(一般情况下主机都会禁用swap)

注意:在容器内使用free命令可以看到的swap空间并不具有其所展现出的空间指示意义,即没有参考意义,不要使用。

--oom-kill-disable 必须先设置-m,当系统出现OOM时内核不会kill该容器

限制cpu使用

--cpu=<value> 限制容器使用cpu的核心数,但不限制运行在哪个核心上

--cpu-shares 按比例分配

--cpuset-cpus 限制容器限制运行在哪个核心上,默认能运行在所有的核心上

内存限制验证

Docker Hub上有一个测试镜像,名为docker-stress-ng,先下载

root@node01:~# docker pull lorel/docker-stress-ng oot@node01:~# docker image ls | grep docker-stress-ng lorel/docker-stress-ng latest 1ae56ccafe55 4 years ago 8.1MB # 查看使用帮助 root@node01:~# docker container run -it --rm --name stress01 lorel/docker-stress-ng stress-ng --help

测试当docker run不限制内存使用时

root@node01:~# docker container run -it --rm --name stress01 lorel/docker-stress-ng:latest stress-ng --vm 2 --vm-bytes 128M stress-ng: info: [1] defaulting to a 86400 second run per stressor stress-ng: info: [1] dispatching hogs: 2 vm` # --vm 2 表示启动2个进程 # --vm-bytes 128M 表示每个进程占用内存

通过docker stats命令查看容器占用资源情况

root@node01:~# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 80595f89ec0f stress01 98.71% 267.8MiB / 1.924GiB 13.59% 906B / 0B 0B / 0B 5

内存占用267.8MiB,约为128M * 2。

现在在docker run时限制容器使用物理内容为128M

oot@node01:~# docker container run -it --rm -m 128M --name stress01 lorel/docker-stress-ng:latest stress-ng --vm 2 --vm-bytes 128M stress-ng: info: [1] defaulting to a 86400 second run per stressor stress-ng: info: [1] dispatching hogs: 2 vm

再次查看容器资源占用情况

root@node01:~# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 591ed9325404 stress01 80.32% 126MiB / 128MiB 98.41% 766B / 0B 61.4MB / 2.84GB 5

内存占用被限制在128M左右。

CPU限制验证

root@node01:~# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1

测试主机有2个核心

同样先docker run不限制cpu

root@node01:~# docker container run -it --rm --name stress01 lorel/docker-stress-ng:latest stress-ng --cpu 4 stress-ng: info: [1] defaulting to a 86400 second run per stressor stress-ng: info: [1] dispatching hogs: 4 cpu # --cpu 4 表示启动4个进程测试cpu

观察cpu资源使用情况

root@node01:~# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 63d15bb3c554 stress01 198.76% 20.76MiB / 1.924GiB 1.05% 1.03kB / 0B 864kB / 0B 5

2个核心被全部占用。

再来限制容器只能使用到1个核心时

root@node01:~# docker container run -it --rm --cpus 1 --name stress01 lorel/docker-stress-ng:latest stress-ng --cpu 4 stress-ng: info: [1] defaulting to a 86400 second run per stressor stress-ng: info: [1] dispatching hogs: 4 cpu

CPU资源占用情况如下

root@node01:~# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 90d86e2d4340 stress01 98.32% 20.7MiB / 1.924GiB 1.05% 766B / 0B 0B / 0B 5

只占用了一个核心的资源。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现学生管理系统(IO版)
下一篇:WHDI正式发布无线家庭数字接口规范WHDI 1.0
相关文章

 发表评论

暂时没有评论,来抢沙发吧~