根据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中进行了搜索,但没有发现任何可以证实或否认我刚才解释的内容。
谁能解释这种不一致性。
答案 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)的交换空间。