c语言sscanf函数的用法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~