Как наложить ограничения памяти на сценарий оболочки?


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 (память и виртуальная память), предотвращая зависание системы, если что-то пойдет не так.

Мой вопрос:
как я могу ограничить объем памяти, используемой этим сценарием оболочки, до определенного количества?


1
Пожалуйста, обратите внимание, что вы можете изменить способ выделения памяти, запустив export USE_ZEND_ALLOC=0.
Педро Кордейру

Ответы:


12

Вы можете ограничить использование памяти с помощью Bash Script, выполнив следующие действия.

Ограничьте использование памяти килобайтами (в данном примере 2 ГБ):

ulimit -m 2048000

Ограничить использование виртуальной памяти:

ulimit -v 2048000

Установите ограничение виртуальной памяти равным жесткому ограничению, чтобы при превышении этого предела процесс прерывался:

ulimit -H -v

Я думаю, что это может делать то, что вы хотите.


1
Этот лимит также учитывается для дочерних процессов? Например, если я вызову erlang REPL в этом скрипте bash, будет ли введен лимит памяти?
Кристоф Де Тройер

2
@ChristopheDeTroyer Предел будет наследоваться дочерними процессами, поэтому дочерние процессы не могут его превышать. Но этот предел не будет применяться ко всему дереву процессов.
карикатурист
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.