Ich habe ein PHP-Skript, das, obwohl ein Ordner XML-Dateien enthält, diese in der Datenbank verarbeitet.
Derzeit läuft auf dem Server PHP Version 5.3.10 und es gibt einen Fehlerbericht über Speicherprobleme, die ZEND_MM_HEAP
innerhalb einer Schleife ausgelöst werden .
Dies führt dazu, dass PHP den Speicher nicht ordnungsgemäß freigibt, was zu einem Fehler und einem Skriptabsturz führt:
zend_mm_heap is corrupted
Einige Lösungen wurden gefunden, aber ich habe keinen Zugriff auf die Servereinstellungen.
Um dies zu bewältigen, habe ich das folgende Bash-Skript vorbereitet, um die Schleife zu behandeln, wobei das PHP-Skript nur für die Verarbeitung der XML-Datei verantwortlich ist:
#!/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
Mein Ziel ist es nun, diese Bash-Speicherzuordnung zu begrenzen (Speicher und virtueller Speicher), um zu verhindern, dass das System hängen bleibt, wenn etwas schief geht.
Meine Frage lautet:
Wie kann ich den von diesem Shell-Skript verwendeten Speicher auf eine bestimmte Menge beschränken?
quelle
export USE_ZEND_ALLOC=0
.Antworten:
Sie können die Speichernutzung durch ein Bash-Skript einschränken, indem Sie die folgenden Schritte ausführen.
Begrenzen Sie die Speichernutzung um KB (in diesem Beispiel 2 GB):
Beschränken Sie die Nutzung des virtuellen Speichers:
Setzen Sie das Limit für den virtuellen Speicher auf ein hartes Limit, damit der Prozess abgebrochen wird, wenn dieses Limit überschritten wird:
Ich denke, das kann machen, was du willst.
quelle