Das Memory Limit beschreibt, wieviel Arbeits-Speicher ein einzelnes PHP Skript für seine Ausführung nutzen darf. In dem Artikel möchte ich einige generelle Worte zum Memory Limit sagen, zeigen wie man es in seinem Webspace verändern kann und welche Werte die Hoster maximal zulassen.
Was bedeutet PHP Memory Limit ?
Der Aufruf eines PHP Skriptes setzt einen Arbeitsspeicher voraus, den das Skript für seine Funktionen nutzen darf. Ein PHP Skript erkennt man an der Dateiendung .php
WordPress und andere dynamische Content-Management-Systeme basieren auf der Programmiersprache PHP.
Das PHP_memory_limit definiert, wieviel Arbeitsspeicher pro Skriptaufruf maximal genutzt werden darf. Ein Beispiel: Wenn das PHP Memory_limit auf 64 MB eingerichtet ist, bedeutet dies, dass jedes PHP Skript auf dem Webspace bis zu 64 MB Arbeitsspeicher nutzen darf. Wenn nun 5 PHP-Skripte gleichzeitig aufgerufen werden, z.B. weil in dem Webspace mehrere WordPress-Instanzen installiert sind, steht trotzdem jedem einzelnen Skript 64 MB zur Verfügung. Es ist also nicht so, dass sich die einzelnen Skripte die 64 MB teilen müssten.
Welche Content-Management-Systeme benötigen welches PHP-Memory ?
WordPress: Von Seiten der WordPress-Entwickler gibt es keine offizielle Anforderung an das Memory_limit. Es dürfte aber im Bereich 32 MB liegen. Im Vergleich zu anderen CMS ist WordPress damit ein sehr viel kleinerer „Ressourcenfresser“ als viele vermuten würden. Zu beachten ist, dass es einige Plugins gibt, die wesentlich höhere Anforderungen an den Speicher voraussetzen. Entweder, weil die Plugins tatsächlich sehr aufwändige Operationen ermöglichen (z.B. ein Shopsystem auf Basis von WooCommerce) oder weil sie einfach schlecht programmiert sind.
Tipp: Mit dem Plugin WP Memory Usage kann der Ressourcenbedarf der einzelnen Plugins analysiert werden.
- Typo3: setzt mindestens 256 MB voraus (Link)
- Joomla: setzt mindestens 128 MB Arbeitsspeicher voraus
- Contao: setzt in der Version 4 mindestens 256 MB Arbeitsspeicher voraus (Link)
Shopsysteme haben noch wesentlich höhere Anforderungen:
- WooCommerce: setzt mindestens 64 MB Arbeitsspeicher voraus (die meisten Plugin-Entwickler empfehlen aber mindestens 128 MB)
- Magento: setzt mindestens 2 GB Arbeitsspeicher voraus
- Shopware: setzt mindestens 256 MB Arbeitsspeicher voraus
- xt:Commerce: 256 MB minimum, 1 GB ist sinnvoll
Wie kann das PHP_memory_limit erhöht werden ?
Vielleicht habt Ihr schon mal eine der folgenden Fehlermeldungen gesehen ?
Fatal error: Allowed memory size of XXXX bytes exhausted (tried to allocate XXXX bytes) in …
Out of memory (allocated XXXX) (tried to allocate XXXXX bytes) in …
In dem Fall scheint das PHP memory_limit für einen bestimmten Prozess nicht auszureichen und sollte erhöht werden.
Hier gibt es unterschiedliche Möglichkeiten, den Wert zu verändern (Hinweis XXX mit dem gewünschten Wert ersetzen z.B. ‚128‘).
Variante 1: wp-config.php
Wer WordPress nutzt, kann den Wert über die wp-config.php anpassen
define(‘WP_MEMORY_LIMIT’, ’XXXM’);
Variante 2: htaccess
Alternativ kann der Wert über die .htaccess angepasst werden
php_value memory_limit XXXM
Variante 3: php.ini
Wer grundsätzlich den Wert für sämtliche PHP-Skripte auf seinem Webspace verändern möchte, der kann die Datei php.ini anpassen. Dafür benötigt man jedoch Root-Rechte, die nicht jeder Hoster seinen Webspace-Kunden einräumt.
memory_limit=XXXM
Variante 4: über das Hosting-Panel
Den gleichen Effekt wie die Veränderung der php.ini hat es, wenn der Hoster in seinem Admin-Panel eine Möglichkeit zur Verfügung stellt, den Wert anzupassen. Dieser wirkt sich dann auch auf sämtliche PHP-Skripte aus.
Auf welchen Wert sollte das Memory_limit gesetzt werden ?
Das hängt zum einen davon ab, wieviel Ressourcen benötigt werden und wieviel der Hoster in dem Webpaket maximal zur Verfügung stellt. Grundsätzlich sollte ein PHP Prozess nur soviel Ressourcen zur Verfügung gestellt bekommen, wie er benötigt. Nicht mehr und nicht weniger.
Ein Beispiel: Wenn auf dem Webspace insgesamt 2 GB an Arbeitsspeicher zur Verfügung stehen und der Wert über die php.ini auf 256 MB gesetzt wurde, bedeutet dies, dass 7 PHP-Prozesse parallel ausgeführt werden können. Wenn der Wert in der php.ini auf 512 MB gesetzt wurde, können noch 3 Prozesse parallel ausgeführt werden. Wird der Wert gar auf 1024 MB gesetzt, kann nur noch 1 Prozess ausgeführt werden, weil für jeden Prozess der entsprechende Arbeitsspeicher reserviert wird, unabhängig davon, wieviel dieser Prozess wirklich benötigt.
Hinweis: Wieviel Arbeitsspeicher auf dem Webspace pro Kunden zur Verfügung steht, ist in der Regel nicht transparent.
Überblick über die maximal möglichen PHP_memory_limits bei den hier getesteten Webhostern
In der nachfolgenden Tabelle zeigen wir, was bei den von uns getesteten Webhostern jeweils für maximale Werte für PHP_memory_limit und für max_execution_time möglich sind. Wir haben leider nicht für alle Hoster diese Werte herausgefunden. Wenn Ihr noch weitere Ergebnisse habt, schreibt uns eine Mail!