如何对 shell 脚本施加内存限制?

Zuu*_*uul 11 bash ram resource-limiting

我有一个 PHP 脚本,虽然文件夹包含 XML 文件,但会将它们处理到数据库中。

目前,服务器运行的是 PHP 5.3.10 版本,并且有一个关于循环内触发的内存问题的错误报告ZEND_MM_HEAP

这会导致 PHP 无法正确释放内存,从而导致错误和脚本崩溃:

 zend_mm_heap is corrupted
Run Code Online (Sandbox Code Playgroud)

找到了一些解决方案,但我无权访问服务器设置。

为了解决这个问题,我准备了以下 bash 脚本来处理循环,让 PHP 脚本只负责处理 XML 文件:

#!/bin/bash

# Check for files to process
# If files are present, call
# the PHP script

DIR="/path/to/dir/with/files"
while [ "$(ls -A $DIR)" ]; do
        php /path/to/php/script/myscript.php
done
Run Code Online (Sandbox Code Playgroud)

我现在的目标是限制这个 bash 内存分配(内存和虚拟内存),从而防止它在出现问题时挂起系统。

我的问题是:
如何将这个 shell 脚本使用的内存限制为特定数量?

Oct*_*ves 13

您可以通过 Bash 脚本限制内存使用,执行以下操作。

按 kb 限制内存使用量(本例中为 2GB):

ulimit -m 2048000
Run Code Online (Sandbox Code Playgroud)

限制虚拟内存使用:

ulimit -v 2048000
Run Code Online (Sandbox Code Playgroud)

将虚拟内存限制设置为硬限制,以便在超过此限制时将杀死进程:

ulimit -H -v
Run Code Online (Sandbox Code Playgroud)

我认为这可以做你想做的。

  • @ChristopheDeTroyer 限制将由子进程继承,因此子进程不能超过该限制。但是此限制不会应用于所有进程树。 (2认同)