首页 > 解决方案 > 超过时间/内存限制时Docker linux终止进程脚本

问题描述

我正在尝试在我的 docker 容器中运行 python 代码。我已经设置了 run.sh 脚本如下:

#!/usr/bin/env bash
ulimit -s 5
timeout --signal=SIGTERM 5 python3 main.py
exit $?

主要.py:

def factorial(x):
    """This is a recursive function
    to find the factorial of an integer"""

    if x == 1:
        return 1
    else:
        return (x * factorial(x-1))


num = 900
print("The factorial of", num, "is", factorial(num))

我运行具有上述脚本的图像,如下所示:

container = subprocess.run(["docker", "run", "mycontainertag"],capture_output=True)

然而,尽管超过了时间和内存限制,它并没有使用阶乘代码终止进程。

标签: pythonlinuxbashdocker

解决方案


问题不在于,而在于ulimit.

ulimit -s 5command 限制了同一 shell 中所有以下命令的堆栈跟踪,问题是 5 可能并不意味着您的想法。您已将堆栈限制设置为 5 * 1024 字节 (5 Kb),考虑到您同时拥有timeoutpython3.

例如,在我的机器上,为了运行,run.sh我需要超过 100 Kb。这个值取决于你机器的操作系统、它的当前状态、你正在使用的 python 版本(我猜),以及其他变量。


推荐阅读