Como impor limites de memória em um script de shell?

7

Eu tenho um script PHP que, enquanto uma pasta contém arquivos XML, irá processá-los no banco de dados.

Atualmente, o servidor está executando a versão 5.3.10 do PHP e há um relatório de erros sobre problemas de memória acionados por ZEND_MM_HEAP em um loop.

Isso faz com que o PHP não liberte memória adequadamente, levando a um erro e a uma falha de script:

 zend_mm_heap is corrupted

Algumas soluções são encontradas, mas eu não tenho acesso às configurações do servidor.

Para lidar com isso, preparei o seguinte script para cuidar do loop, deixando o script PHP apenas responsável pelo processamento do arquivo 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

Meu objetivo agora é ter essa alocação de memória bash limitada (memória e memória virtual), evitando que ela suspenda o sistema se algo der errado.

Minha pergunta é:
Como posso limitar a memória usada por este script de shell para um valor específico?

    
por Zuul 02.10.2012 / 15:24

1 resposta

9

Você pode limitar o uso da memória por um script Bash, fazendo o seguinte.

Limite o uso de memória por kb (2GB neste exemplo):

ulimit -m 2048000

Limite o uso de memória virtual:

ulimit -v 2048000

Defina o limite de memória virtual como limite máximo, para que o processo seja eliminado quando exceder esse limite:

ulimit -H -v

Acho que isso pode fazer o que você quer.

    
por Octávio Filipe Gonçalves 02.10.2012 / 15:27