Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已超出Docker内存限制_Docker_Docker Compose - Fatal编程技术网

已超出Docker内存限制

已超出Docker内存限制,docker,docker-compose,Docker,Docker Compose,我有以下docker compose文件: 版本:“2.4” 服务: 自动检查: 图片:python 成员限额:97M 启动时运行以下python脚本: x='a'*(2*10**8) 正如预期的那样,docker失败,错误代码为137。 但是,当我设置mem_limit:98M时,错误不会再现。 知道docker为什么允许如此极端的内存限制冲突吗? 图像大小为135MB(ubuntu20+python3) (在WSL2 ubuntu上运行:20.04) 谢谢你的帮助 发生这种情况是因为me

我有以下docker compose文件:

版本:“2.4”
服务:
自动检查:
图片:python
成员限额:97M
启动时运行以下python脚本:

x='a'*(2*10**8)
正如预期的那样,docker失败,错误代码为137。
但是,当我设置
mem_limit:98M
时,错误不会再现。 知道docker为什么允许如此极端的内存限制冲突吗?
图像大小为135MB(ubuntu20+python3)

(在WSL2 ubuntu上运行:20.04)


谢谢你的帮助

发生这种情况是因为
memswap\u limit
默认为
mem\u limit
的值,这意味着您将获得
mem\u limit
常规内存和另一个
memswap\u limit(=mem\u limit)
交换内存,总共2倍
mem\u limit

您可以将
mem_limit
设置为实际所需限制的一半,也可以将
memswap_limit:0M
设置为完全禁用交换

运行

/usr/bin/time --verbose python3 -c "x = 'a' * (2 * 10 ** 8)" 2>&1 1>/dev/null | grep 'Maximum resident'
在我的机器上我们可以看到

Maximum resident set size (kbytes): 203708

这个Python脚本在最高峰时使用内存。在MiB术语中,即
203708000/1024/1024~194MiB
。其中一半是~
97MiB
。这就是你观察到的98-99米极限的来源~98MiB用于常规内存,~98MiB用于交换,总共~194MiB,这是~python3-c“x='a'*(2*10**8)

在我的机器上98M仍然给出代码137,但99M+没有