Docker: 限制容器可用的内存

前端之家收集整理的这篇文章主要介绍了Docker: 限制容器可用的内存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

包括 docker daemon 和其它一些重要的程序。更危险的是如果某个支持系统运行的重要进程被干掉了,整个系统也就宕掉了!这里我们考虑一个比较常见的场景,大量的容器把主机的内存消耗殆尽,OOME 被触发后系统内核立即开始杀进程释放内存。如果内核杀死的第一个进程就是 docker daemon 会怎么样?结果是所有的容器都不工作了,这是不能接受的!

#!/bin/ proc $( /proc -maxdepth -regex ); score) >/dev/ | -nr | -n

输出得分最高的 40 个进程,并进行了排序:

显示进程的得分,MysqLd 排到的第一名。显示为 node server.js 的都是容器进程,排名普遍比较靠前。红框中的是 docker daemon 进程,非常的靠后,都排到了 sshd 的后面。

RUN apt-get update &&<span style="color: #000000"> \
apt-get <span style="color: #0000ff">install stress

$ docker build -t u-stress:latest .

$ docker run -it -m 300M --memory-swap - --name con1 u-stress /bin/bash

函数分配内存:

# stress --vm --vm-bytes 500M

50299525ddbd886975b5e415c0.png" alt="">

查询 stress 命令相关的进程,进程号比较大的那个是用来消耗内存的进程,我们就查看它的内存信息。VIRT 是进程虚拟内存的大小,所以它应该是 500M。RES 为实际分配的物理内存数量,我们看到这个值就在 300M 上下浮动。看样子我们已经成功的限制了容器能够使用的物理内存数量

--memory-swap 是必须要与 --memory 一起使用的。

--memory-swap 居然是容器可以使用的物理内存和可以使用的 swap 之和!

$ docker run -it -- -m 300M --memory-swap=300M u-stress /bin/--vm --vm-bytes 500M

猜你在找的Docker相关文章