内存交换限制

时间:2018-11-06 12:35:47

标签: docker

根据the docker documentation如果未设置--memory-swap且已设置--memory,则容器可以使用的swap--memory设置的两倍主机容器已配置交换内存。

因此以下两个命令是等效的:

 docker run --rm -it -m 128m progrium/stress --vm 1 --vm-bytes 300M --vm-hang 0

 docker run --rm -it -m 128m --memory-swap 384m progrium/stress --vm 1 --vm-bytes 300M --vm-hang 0

不幸的是,它没有给出相同的结果。

docker run --rm -it -m 128m progrium/stress --vm 1 --vm-bytes 300M --vm-hang 0
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogvm worker 1 [5] forked
stress: dbug: [5] allocating 314572800 bytes ...
stress: dbug: [5] touching bytes in strides of 4096 bytes ...
stress: FAIL: [1] (416) <-- worker 5 got signal 9
stress: WARN: [1] (418) now reaping child worker processes
stress: FAIL: [1] (422) kill error: No such process
stress: FAIL: [1] (452) failed run completed in 4s

# docker run --rm -it -m 128m --memory-swap 384m progrium/stress --vm 1 --vm-bytes 300M --vm-hang 0
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogvm worker 1 [5] forked
stress: dbug: [5] allocating 314572800 bytes ...
stress: dbug: [5] touching bytes in strides of 4096 bytes ...
stress: dbug: [5] sleeping forever with allocated memory

在我看来,文档中有错误。实际上,如果未设置--memory-swap且已设置--memory,则--memory-swap的值将设置为--memory参数的两倍。我在docker's code中进行了搜索,但没有发现任何可以证实或否认我刚才解释的内容。

谁能解释这种不一致性。

1 个答案:

答案 0 :(得分:0)

Docker Documentation on Resources现在说明此用例

如果未设置--memory-swap并设置了--memory,则在主机容器配置了交换内存的情况下,容器可以使用与--memory设置一样多的交换空间。例如,如果未设置--memory =“ 300m”和--memory-swap,则该容器总共可以使用600m的内存和交换空间。

我认为,这种混淆可能与单词“选择不当”有关。该参数似乎仅指交换内存,而实际上指的是RAM +交换。将其命名为--total-memory可以使它更清晰。

-memory-swap表示可以使用的内存和交换总量,而--memory控制非交换内存的使用量。因此,如果--memory =“ 300m”和--memory-swap =“ 1g”,则容器可以使用300m的内存和700m(1g-300m)的交换空间。