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

6

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

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

    
задан Zuul 02.10.2012 в 15:24
источник

1 ответ

7

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

Ограничьте использование памяти с помощью kb (2GB в этом примере):

ulimit -m 2048000

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

ulimit -v 2048000

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

ulimit -H -v

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

    
ответ дан Octávio Filipe Gonçalves 02.10.2012 в 15:27
источник