一个主机上码头工人会运行若干容器,每个容器都需要CPU、内存和IO资源。对于KVM, VMware等虚拟化技术,用户可以控制分配多少CPU、内存资源给每个虚拟机。对于容器,码头工人也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个主机的性能。
<强>内存限额强>
与操作系统类似,容器可使用的内存包括两部分:物理内存和交换。码头工人通过下面两组参数来控制容器内存的使用量。
, <代码> - m 代码>或<代码>——内存> 代码:设置内存的使用限额,例如100,2 g。
2, <代码>——memory-swap> 代码:设置<强>内存+交换的使用限额。强>
当我们执行如下命令:
码头工人运行ubuntu - m 200——memory-swap=300
其含义是允许该容器最多使用200的内存和100的交换。默认情况下,上面两组参数为1,即对容器内存和交换的使用没有限制。
下面我们将使用progrium/压力镜像来学习如何为容器分配内存。该镜像可用于对容器执行压力测试。执行如下命令:
码头工人运行- - m 200——memory-swap=300 progrium vm/压力——1——vm-bytes 280
<代码>——vm 1> 代码:启动1个内存工作线程。
<代码>——vm-bytes 280 m> 代码:每个线程分配280米内存。
运行结果如下:
因为280在可分配的范围(300米)内,所以工作线程能够正常工作,其过程是:
-
<李>分配280米内存。李>
<李>释放280米内存。李>
<李>再分配280米内存。李>
<李>再释放280米内存。李>
<李>一直循环…李>
如果让工作线程分配的内存超过300米,结果如下:
分配的内存超过限额,压力线程报错,容器退出。
如果在启动容器时只指定<代码> - m> 代码而不指定<代码>——memory-swap> 代码,那么<代码>——memory-swap 代码>默认为<代码> - m> 代码的两倍,比如:
码头工人运行ubuntu - - m 200
容器最多使用200物理内存和200交换。
内存限额就讨论到这里,希望对大家的学习有所帮助,也希望大家多多支持。