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


10

我有一个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
请注意,您可以通过运行来更改分配内存的方式export USE_ZEND_ALLOC=0
Pedro Cordeiro

Answers:


12

您可以通过以下Bash脚本来限制内存使用量。

将内存使用量限制为kb(在此示例中为2GB):

ulimit -m 2048000

限制虚拟内存的使用:

ulimit -v 2048000

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

ulimit -H -v

我认为这可以做您想要的。


1
此限制是否也适用于子进程?例如,如果我在此bash脚本中生成了一个erlang REPL,是否会施加内存限制?
Christophe De Troyer 2014年

2
@ChristopheDeTroyer该限制将由子进程继承,因此子进程不能超过该限制。但是此限制不会应用于所有进程树。
漫画家
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.