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

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

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

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

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

 zend_mm_heap is corrupted

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

为了解决这个问题,我准备了以下 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

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

我的问题是:
我怎样才能将此 shell 脚本使用的内存限制为特定量?

答案1

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

以 kb 为单位限制内存使用量(此示例中为 2GB):

ulimit -m 2048000

限制虚拟内存的使用:

ulimit -v 2048000

将虚拟内存限制设置为硬限制,这样当超过此限制时进程将被终止:

ulimit -H -v

我认为这可以满足您的要求。

相关内容