Icon für RSS-Feed Link zum XING-Profil
Wählen Sie eine Hintergrundfarbe:
Schwarzer Hintergrund Blauer Hintergrund Hellblauer Hintergrund Rose Hintergrund Grüner Hintergrund Grüner Hintergrund Olivfarbener Hintergrund Gelber Hintergrund Sandfarbiger Hintergrund Beiger Hintergrund Weisser Hintergrund
Texthintergrund:
Schwarzer Hintergrund Weisser Hintergrund Transparenter Hintergrund


Ladebild
Brick in the Wall

WordPress memory_limit erhöhen

Von Matu am 27. Juni, 2009 (03:12 Uhr) unter Kategorie: PHP, WordPress

In den letzten Tagen nach Erscheinen der neuen WordPress-Version häuften sich in den Blogs die Artikel zum Thema Speichererhöhung in Verbindung mit der Fehlermeldung

Fatal error: Allowed memory size of … bytes exhausted …

WordPress Deutschland hat dazu am 16. Juni 2009 eine gute Erklärung in den FAQ veröffentlicht. Besonders der Trick mit der Sprachdatei ist interessant (senkt bei mir den Speicherverbrauch um 13%).
Am gleichen Tag wurde dazu ebenfalls ein kleiner Beitrag auf bueltge.de veröffentlicht.
Beide weisen auf das Plugin „WP-Memory-Usage“ von Alex Rabe hin, das

  • die Version
  • den verfübaren Speicher
  • sowie den aktuellen Speicherbedarf der WordPress-Installation

anzeigt.
Dieses Plugin ermittelt mit den PHP-Funktionen memory_get_usage() den aktuellen Speicherverbrauch und mit ini_get(’memory_limit’) die Lokal zugewiesene Speichergröße.

An dieser Stelle möchte ich Ihnen gerne einen tieferen Einblick in die Materie bieten.

Der Arbeitspeicher (memory_limit) für die einzelnen Hosts auf dem Webserver wird an 2 Stellen festgelegt. Die erste allumfassende Einstellung erfolgt durch den Webhoster in der php.ini.
In dieser wichtigen Konfigurationsdatei sind sämtliche Einstellungen für den PHP-Server hinterlegt. Verständlicherweise unterbinden Web-Hoster den Zugriff auf diese Datei, da sich viele Benutzer einen Server teilen. Mietet man sich einen sogenannten Root-Server sieht das natürlich anders aus.
Dort wird (unter vielen anderen Einstellungen) der memory_limit eingestellt, welcher dann als sogenannter master value für den gesamten Server und den darauf befindlichen einzelnen Hosts die maximal zur Verfügung stehende Speichergröße für PHP-Scripte vorgibt.

Dieser Wert bzw. die gesamte php.ini kann mit der PHP-Funktion phpinfo() ausgelesen werden. Wenn Sie das gerne machen möchten, dann führen Sie folgende Schritte aus:

  • Legen Sie im Backend-Bereich von Wordpress eine neue Seite mit dem Titel Backend und einem kurzen Text an
  • Stellen Sie die Sichtbarkeit rechts oben in der “Veröffentlichen-Box” auf Privat (dadurch kann die Seite erstens nur von Ihnen und zweitens nur wenn Sie eingeloggt sind aufgerufen werden. Die php.ini sollte aus Sicherheitsgründen nur von Ihnen einsehbar sein)
  • Fügen Sie nach dem Speichern der Seite folgendes in die page.php unterhalb des “Loop” Ihres Theme-Ordners ein:

     /* .../wp-content/themes/ihr_theme/page.php */
    <?php
    if(is_page('backend')){
    phpinfo();
    }
    ?>
     /* Speichern nicht vergessen!
    Anmerkung: Anstatt die page.php zu verändern,
    kann diese auch kopiert und umbenannt werden
    (backend.php).
    Diese kann dann als Template beim Neuanlegen
    der Seite ausgewählt werden.
    Dadurch halten Sie die page.php "sauber"
    und können in Zukunft noch weitere php-Scripte
    einfügen ...*/
    
  • Rufen Sie nun die zuvor angelegte Seite auf, in dem Sie deren Permalink (z.B. http://ihre_domain/backend) in die Adresszeile Ihres Browser eingeben. Dazu müssen Sie sich wie schon erwähnt vorher eingeloggt haben (der Browser speichert das als Cookie ab).

Nun sollte die Seite mit der gesamten php.ini angezeigt werden. Suchen Sie dort (STRG+F) nach memory_limit. Es werden 3 Spalten angezeigt:

  • Directive –> gibt den Namen an
  • Local Value –> gibt den lokal verfügbaren maximalen Speicher an (… der Ihrer WordPress-Installation in Ihrem Host-Verzeichnis zur Verfügung steht)
  • Master Value –> gibt den durch Ihren Webhoster freigegebenen bzw. vorgegebenen maximalen Speicher an (dieser Wert gildet auf dem gesamten Server für alle Hosts)

Somit wären wir auch schon bei der zweiten Einstellungsmöglichkeit, dem local value. Local value … master value? Etwas verwirrend, oder?! Ging mir zuerst genauso. Vor allem das Zusammenspiel bzw. die Abhängigkeit brachte mich etwas ins Grübeln.

Wenn der Webhoster das maximale Speicherlimit für alle Hosts auf dem Server schon durch den master value in der php.ini festgelegt hat (auf die ich keinen Zugriff habe), kann ich diesen Wert etwa Lokal in meinem eigenen Verzeichnis hochschrauben und mir so mehr Speicher zuschieben, als alle anderen zur Verfügung haben?

Richtig, genau so ist es!

Aber nür, wenn der Webhoster das auch zuläßt.
Dazu gibt es verschiedene Möglichkeiten. Eine wäre, in der wp-config.php die globale Variable WP_MEMORY_LIMIT neu zu setzen und ihr einen Wert zuzuweisen, der höher liegt als die Grundeinstellung von 32 MB (definiert in der wp-settings.php).

<?php
...
define('WP_MEMORY_LIMIT', '64M');
...
?>

Wobei die 65 MB nur ein Beispiel sind, ich konnte den Wert bei mir auch höher schrauben, …

Memory Limit1 in WordPress memory_limit erhöhen

… was mich etwas stutzig machte. Also habe ich mal bei meinem Webhoster nachgefragt und bekam folgende Antwort, die ich nur in Auszügen veröffentliche:

Hallo,

erst einmal möchte ich Ihnen mitteilen, dass ich bisher sehr zufrieden bin.
Und nun eine kleine Frage:
Ist es von Ihnen gewollt, dass der ‘memory_limit’ in der ‘php.ini’ lokal per htaccess oder ini_set() überschrieben werden kann?

Gruß
Jörg Mathuszczyk

Darauf kam folgende Antwort:

Hallo Herr Mathuszczyk,

vielen Dank für Ihre Anfrage.

Dies ist gewollt, da einige Scripte dies benötigen. Wenn sich dadurch jedoch feststellt, das besagter Kunde damit den Server überlastet müssen wir einschreiten.

Bei weiteren Fragen stehen wir Ihnen gern zur Verfügung.

An dieser Stelle noch mal vielen Dank an den Support für die (sehr) schnelle Antwort.

Kommen wir nun zu einer weiteren Möglichkeit, den memory_limit hochzusetzen.
Dazu benutzen wir die PHP-Funktion ini_set() und fügen diese an Stelle der zuvor genannten WP_MEMORY_LIMIT in die wp-config.php ein.

<?php
...
ini_set('memory_limit', '65M');
...
?>

Auch dies funktionierte bei mir ohne Probleme. Ist auch logisch, denn beim Setzen von WP_MEMORY_LIMIT wird haargenau die gleiche Funktion benutzt, um den memory_limit festzulegen. Dies geschieht per Zuweisung in der wp-settings.php.

<?php
/**
 * Used to setup and fix common variables and include
 * the WordPress procedural and class library.
 *
 * You should not have to change this file and allows
 * for some configuration in wp-config.php.
 *
 * @package WordPress
 */

if ( !defined('WP_MEMORY_LIMIT') )
	define('WP_MEMORY_LIMIT', '32M');

if ( function_exists('memory_get_usage') && ( (int) @ini_get('memory_limit') < abs(intval(WP_MEMORY_LIMIT)) ) )
	@ini_set('memory_limit', WP_MEMORY_LIMIT);

 ...

Eine dritte Möglichkeit ermöglicht das Speicherlimit in der .htacces-Datei festzulegen, indem dort folgendes eingefügt wird:

php_value memory_limit 65M

# BEGIN WordPress

RewriteEngine On
...

Dieser Weg war bei mir ebenfalls möglich, muss aber wiederum durch den jeweiligen Webhoster zugelassen werden.

Auch wenn es verlockend klingt, den Wert gleich um ein vielfaches hochzusetzen, rate ich davon dringend ab. Ein schlecht programmiertes oder fehlerhaftes Script (Plugin, …) könnte so den gesamten zur Verfügung stehenden Arbeitsspeicher “in Beschlag nehmen”, was den gesamten Server beinträchtigen würde. Aus diesem Grund empfehle ich einen eher kleinen Wert mit etwas Spielraum nach oben (65 MB sollten bei einem WordPress-Blog dicke ausreichen).
Ansonsten würde ich nach Plugins Ausschau halten, die “mächtig Hunger haben”. Eine schnelle Senkung kann durch die oben bereits angesprochene Deaktivierung der deutschen Sprachdatei in der wp-config.php erzielt werden.

define ('WPLANG', 'de_DE');
 /* hier 'de_DE' entfernen */
define ('WPLANG', '');

Durch diese Maßnahme wird das Backend von WordPress zwar wieder in Englisch angezeigt (Grundeinstellung), senkt aber den Ressourcenverbrauch um einiges. Wenn Sie nicht erst seit kurzem mit WordPress arbeiten, sollte das nicht weiter stören.

Bietet Ihr Webhoster von Haus aus nur wenig Arbeitspeicher und das Limit kann auch nicht lokal durch die genannten Maßnahmen erhöht werden, wäre ein Wechsel anzuraten. Dadurch treten auch in Zukunft solche Probleme gar nicht erst auf.

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)
Loading ... Loading ...

Besucher dieses Artikels betrachteten auch:
  1. WordPress Kommentare mit Smileys
  2. WordPress Plugins

3 Antworten zu “WordPress memory_limit erhöhen”

Deine Meinung ist mir wichtig!

Es besteht die Möglichkeit, Kommentare nachträglich innerhalb einer Zeitspanne von 5 Minuten zu ändern (Keine werblichen Kommentare)
Jeder 1. Kommentar muss freigeschaltet werden!

Smileys:spy:

Nach oben