gpt4 book ai didi

超出 Docker 内存限制

转载 作者:行者123 更新时间:2023-12-02 18:33:49 32 4
gpt4 key购买 nike

我有以下 docker-compose 文件:

version: "2.4"
services:
auto_check:
image: python
mem_limit: 97M

启动时运行以下 python 脚本:

x = 'a' * (2 * 10 ** 8)

正如预期的那样,docker 失败,错误代码为 137。
但是,当我设置 mem_limit: 98M 时,错误不会重现。知道为什么 docker 允许这种极端的内存限制违规吗?
图片大小为135MB(ubuntu20+python3)。

(在 WSL2-ubuntu:20.04 上运行)

感谢您的帮助!

最佳答案

发生这种情况是因为 memswap_limit 默认为 mem_limit 的值,这意味着您将获得 mem_limit 常规内存和另一个 memswap_limit ( == mem_limit) 的交换内存,总共是 2x mem_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-99M 限制的来源。常规内存~98MiB,swap~98MiB,一共~194MiB,这是~python3 -c "x = 'a' * (2 * 10 ** 8)" 的峰值内存消耗>

关于超出 Docker 内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64270202/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com