当进程在 Docker 容器内运行时,如何充分利用所有可用的交换空间

当进程在 Docker 容器内运行时,如何充分利用所有可用的交换空间

我编写了一个测试 Node 应用,它会占用内存(以 100MB 为单位)。我尝试让它继续分配超出 8GB 物理内存限制的内存,方法是使用在其上运行的 Ubuntu 机器上配置的交换空间(16GB)。

在 Node 中正常运行时,它工作正常,如下所示:

node --max-old-space-size=16384 ./memtest/memtest.js

当我在 Docker 容器内运行它时,它会因物理内存的限制而终止。

我尝试了一些 Docker 选项来尝试让它使用交换空间,但它仍然在同一点被杀死。

docker run -m 8g --memory-swap -1 --memory-swappiness 100 ...

Amount allocated before container is killed: 3037.08 MB

# swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file  16G 187M   -2

# free
              total        used        free      shared  buff/cache   available
Mem:        8148324     1022788     5538364         124     1587172     6813484
Swap:      16777212      191228    16585984

从下面的文档看来,默认行为应该是允许无限制地使用内存 + 交换 - 正如我试图实现的那样。但是,我没有看到这一点。

https://docs.docker.com/config/containers/resource_constraints/

我想了解 Docker 内部行为不同的原因,以及如何允许充分利用所有可用的交换空间 当进程在 Docker 容器内运行时

相关内容