Das man bei PHP eigentlich nicht auf den Speicher achten muss ist entweder Freud oder Leid. Die Freude ist begrenzt denn ab einer gewissen Größe ist der Speicherverbrauch nicht mehr so einfach “wegzuimplementieren”.
Abhilfe schafft hier eine PECL Erweiterung namens “memtrack” die PHP Warnung anhand von Schwellwerten in die Fehlerbehandlung von PHP einkippt. Man wird also während der Entwicklung bereits gewarnt oder überprüft regelmäßig seine Logs nach ausreißern.
Die Installation ist denkbar einfach mit PECL oder per Hand:

# wget "http://pecl.php.net/get/memtrack-0.2.1.tgz"
# tar -xvzf memtrack-0.2.1.tgz
# cd memtrack-0.2.1
# phpize
# sh configure
# make install

Danach erstellt man sich einen php.ini Eintrag um das Modul erstmal zu laden:

# cat memtrack.ini
[memtrack]
extension=memtrack.so
memtrack.enabled = 1
memtrack.soft_limit=1M
memtrack.vm_limit=3M

Wir stellen eine Prozessschwelle (vm_limit) von 3MB und eine Ausführungsschwelle von 1MB. Außerdem aktivieren wir das Module global für alle laufenden PHP Interpreter Instanzen.
Mit Hilfe eines kleinen Scripts den Speicherverbrauch aufdrehen und sich über die Warnungen freuen (oder weinen):

# cat test.php

# php test.php
PHP Warning:  [memtrack] [pid 5704] user function buildArray() executed in /tmp/test.php on line 13 allocated 27787264 bytes in Unknown on line 0
PHP Stack trace:
PHP   1. {main}() /tmp/test.php:0
PHP Warning:  [memtrack] [pid 5704] virtual memory usage on shutdown: 31571968 bytes in Unknown on line 0
Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.