docker的资源限制
1、docker资源限制介绍
官网: https://docs.docker.com/engine/containers/resource_constraints/
带有内存、CPU 和 GPU 的运行时选项
默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker 提供了控制容器可以使用多少内存或 CPU 的方法,设置docker run命令的运行时配置标志。本节提供有关何时应该设置此类限制以及设置这些限制的可能影响的详细信息。
其中许多功能需要您的内核支持 Linux 功能。要检查支持,您可以使用该 docker info命令。如果您的内核中禁用了某个功能,您可能会在输出的末尾看到如下警告:
WARNING: no swap limit support
1 2 3 4
| 阿里云上面没有swap空间,因为swap是虚拟的,阿里云也是虚拟的 docker k8s都不要搞swap,本来就是虚拟化的产品,把虚拟磁盘再变成虚拟内存,性能更低
当磁盘被沾满了,会内存溢出,会启动OOM kill,会杀进程
|
Dokcer内存限制
Docker限制内存的相关参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 1、拉取压测工具的镜像 [root@docker03 ~]# docker pull akarshes/docker-stress-ng:latest
2、# 内存限制测试
[root@docker02 ~]# docker run --name mem_test -it --rm akarshes/docker-stress-ng --vm 8 [root@docker03 ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 9450d02cb9a1 mem_test 234.65% 2.006GiB / 2.885GiB 69.55% 586B / 0B 5.55MB / 0B 17
[root@docker03 ~]# docker run --name mem_test -it --rm -m 200m akarshes/docker-stress-ng --vm 8 [root@docker03 ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 7870345de325 mem_test 136.94% 193.2MiB / 200MiB 96.59% 656B / 0B 59.7MB / 7.41GB 15
-m:允许容器使用的最大内存,单位:k、m、g --oom-kill-disable
docker run --name mem_test -it --rm akarshes/docker-stress-ng --help
Example: stress-ng --cpu 8 --io 4 --vm 2 --vm-bytes 128M --fork 4 --timeout 10s
|
Dokcer限制CPU
1 2 3 4 5 6 7 8 9
| [root@docker02 ~]# docker run --name mem_test -it --rm akarshes/docker-stress-ng --cpu 4 [root@docker03 ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 3c74f649be1e mem_test 214.19% 25.6MiB / 2.885GiB 0.87% 656B / 0B 0B / 0B 9
[root@docker02 ~]# docker run --name mem_test -it --rm --cpus 0.5 akarshes/docker-stress-ng -cpu 8
|
我们资源限制不是目的,目的是我们要随时监控到我们的资源,能看到容器对宿主机资源的使用,才能更好的做限制,不要盲目限制,不知道资源使用的情况下,就对容器资源限制,是很危险的。所以我们要对容器进行监控,如果不监控。容器超载了就会出现OMM内存溢出,杀进程的情况