Mam skrypt PHP, który choć folder zawiera pliki XML, przetwarza je w bazie danych.
Obecnie na serwerze działa PHP w wersji 5.3.10 i jest raport o błędzie dotyczący problemów z pamięcią wywoływanych przez ZEND_MM_HEAP
pętlę.
To powoduje, że PHP nie zwalnia prawidłowo pamięci, co prowadzi do błędu i awarii skryptu:
zend_mm_heap is corrupted
Znaleziono kilka rozwiązań , ale nie mam dostępu do ustawień serwera.
Aby temu zaradzić, przygotowałem następujący skrypt bash do obsługi pętli, pozostawiając skrypt PHP odpowiedzialny tylko za przetwarzanie pliku 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
Moim celem jest teraz ograniczenie tego przydziału pamięci bash (pamięć i pamięć wirtualna), aby zapobiec zawieszeniu się systemu, jeśli coś pójdzie nie tak.
Moje pytanie brzmi:
jak mogę ograniczyć pamięć używaną przez ten skrypt powłoki do określonej ilości?
źródło
export USE_ZEND_ALLOC=0
.Odpowiedzi:
Możesz ograniczyć użycie pamięci za pomocą skryptu Bash, wykonując następujące czynności.
Ogranicz użycie pamięci o kb (2 GB w tym przykładzie):
Ogranicz użycie pamięci wirtualnej:
Ustaw limit pamięci wirtualnej na twardy, aby proces został zabity po przekroczeniu tego limitu:
Myślę, że to może zrobić, co chcesz.
źródło