"Allowed Memory Size Exhausted" oplossen in WordPress
Als je site Fatal error: Allowed memory size of 268435456 bytes exhausted toont, voeg dan deze regel toe aan wp-config.php boven de / That's all, stop editing! /
Gepubliceerd
Als je site Fatal error: Allowed memory size of 268435456 bytes exhausted toont, voeg dan deze regel toe aan wp-config.php, boven de comment /* That's all, stop editing! */: define( 'WP_MEMORY_LIMIT', '256M' );. Daarmee zijn de meeste sites binnen een minuut weer online. Maar lees de rest van deze pagina voordat je verder gaat, want het verhogen van de limiet is een diagnose, geen oplossing. Als de crash terugkomt bij een hoger getal, dan is het echte probleem code die zonder grens geheugen opslokt, en een hoger plafond geeft die code alleen maar meer touw om zichzelf mee op te hangen.
Wat de foutmelding werkelijk betekent
PHP houdt bij hoeveel geheugen elke request heeft gereserveerd. Wanneer één request meer probeert te reserveren dan de memory_limit uit php.ini (of overschreven door WordPress), kapt PHP de request onmiddellijk af met een kritieke fout en print het aantal bytes waarbij het strandde. 268435456 bytes is 256M. 134217728 is 128M. 536870912 is 512M. Het getal na “tried to allocate” vertelt je de omvang van de laatste druppel, niet de omvang van het probleem.
WordPress legt bovenop de PHP-limieten zijn eigen limieten. WP_MEMORY_LIMIT (standaard 40M, of de PHP-limiet als die hoger is) bepaalt de front-end. WP_MAX_MEMORY_LIMIT (standaard 256M) bepaalt bewerkingen aan de beheerkant, zoals de mediabibliotheek en plugin-updates, die terecht meer nodig hebben. WordPress roept bij het laden ini_set('memory_limit', ...) aan op basis van deze constanten, maar alleen als je host ini_set toestaat, en alleen tot de harde bovengrens die je host instelt. Dat laatste is de reden waarom het aanpassen van wp-config.php soms niets lijkt te doen.
Los het op, op volgorde
1. Verhoog de WordPress-limiet in wp-config.php. Dit is het eerste wat je probeert, omdat het omkeerbaar is en verder niets aanraakt.
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
Als je niet zeker weet waar deze regels moeten komen, of je wilt meteen de andere gangbare constanten correct instellen, dan schrijft onze wp-config generator een net blok dat je kunt plakken. De plaatsing is belangrijk: alles onder de “stop editing”-regel wordt genegeerd.
2. Als dat niets doet, begrenst je host PHP. Verhoog memory_limit op PHP-niveau. In php.ini:
memory_limit = 256M
Op veel shared hosts kun je php.ini niet rechtstreeks aanpassen. Probeer dan een .user.ini-bestand in je webroot, of stel het in via .htaccess op een Apache/mod_php-setup:
php_value memory_limit 256M
Let op: php_value in .htaccess geeft een 500-fout op nginx of op PHP-FPM-setups, omdat het een Apache/mod_php-directive is. Krijg je een 500 nadat je het hebt toegevoegd, dan is dat de reden: verwijder het en gebruik .user.ini.
3. Controleer de waarde die daadwerkelijk actief is. Vertrouw niet op wat je hebt aangepast; vertrouw op wat PHP rapporteert. Zet een bestandje van één regel in je webroot:
<?php echo ini_get('memory_limit');
Laad het in een browser, lees de waarde uit en verwijder het bestand daarna. Als er nog steeds 128M staat nadat je 256M hebt ingesteld, dan overschrijft je host je en moet je contact met ze opnemen of hun instelling in het controlepaneel gebruiken.
Het deel dat de meeste handleidingen overslaan
Het verhogen van de limiet is diagnose. Zo lees je het resultaat.
Als je 256M instelt en de site blijft bij normaal verkeer overeind, dan had je een terecht plafond dat te laag stond. Dit komt vaak voor bij sites met grote mediabibliotheken, WooCommerce of paginabouwers. Je bent klaar.
Als je 256M instelt en het crasht opnieuw, en daarna 512M en het crasht wéér, stop dan met verhogen. Een normale WordPress-request heeft geen 512M nodig. Wanneer het geheugengebruik zonder plafond blijft oplopen, loopt of stapelt er iets: een plugin die een hele databasetabel in een array laadt, een add_action die zichzelf recursief triggert, een importroutine die alle rijen tegelijk in het geheugen houdt, of twee plugins die binnen dezelfde hook met elkaar vechten. Het verhogen van de limiet lost een ongebonden lus niet op; het verschuift de crash alleen een paar seconden en maakt hem lastiger te reproduceren.
Om de boosdoener te vinden, deactiveer je alle plugins en schakel je over op een standaardthema zoals Twenty Twenty-Four. Als de foutmelding stopt, activeer je ze één voor één opnieuw tot hij terugkomt. Zet de debug-log aan om te achterhalen waar het strandt:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
De kritieke regel in wp-content/debug.log noemt het bestand en regelnummer dat het laatste blok reserveerde. Dat is meestal de lus, of één functieaanroep daarvandaan.
Wat je niet moet doen
Zet WP_MEMORY_LIMIT niet op -1 of 1024M en vergeet het dan. Onbeperkt geheugen lost geen lek op; het laat een op hol geslagen request de hele server opeten, wat elke andere site op dezelfde machine kan platleggen en je een telefoontje van je host oplevert. Een plafond is een veiligheidsmaatregel. Houd er één.
Plak ini_set('memory_limit', '512M') niet in functions.php als primaire oplossing. Het draait bij sommige fouten te laat: als de crash optreedt tijdens het laden van de WordPress-core, voordat de functions.php van je thema wordt uitgevoerd, draait de regel nooit. wp-config.php laadt eerder en is de juiste plek.
Ga er niet van uit dat het een hostingprobleem is en upgrade je pakket niet meteen. Soms is de hosting echt te krap bemeten. Vaak volgt precies dezelfde crash je naar het grotere pakket, omdat de oorzaak meeverhuist in je plugins. Sluit eerst de lus uit; dat is gratis.
Verhoog memory_limit niet om een max_execution_time-fout op te lossen. Dit zijn verschillende limieten met verschillende meldingen. Geheugenuitputting zegt “Allowed memory size … exhausted.” Een time-out zegt “Maximum execution time … exceeded.” De verkeerde verhogen kost je een middag.
Nog steeds vast?
Als je hebt bevestigd dat de actieve limiet werkelijk 256M of hoger is, je hebt getest met alle plugins uit en een standaardthema, en het put nog steeds het geheugen uit, dan heb je een echt lek dat het waard is om in de debug-log na te jagen, geen plafond dat het waard is om te verhogen. Leg de kritieke regel vast, noteer naar welke plugin-map hij verwijst, en dat is je bugrapport. Zet eerst je basisconstanten in wp-config.php goed met de wp-config generator, zodat je zeker weet dat de limieten staan waar je denkt dat ze staan, en ga daarna de log lezen.
FAQ
Vragen
Hoe los ik “Allowed memory size exhausted” op in WordPress?
Voeg define( 'WP_MEMORY_LIMIT', '256M' ); toe aan wp-config.php, boven de regel /* That's all, stop editing! */, want alles daaronder wordt genegeerd. Daarmee zijn de meeste sites binnen een minuut weer terug, maar behandel de hogere limiet als een diagnose en niet als een blijvende oplossing.
Hoeveel MB is 268435456 bytes in de PHP-geheugenfout?
268435456 bytes is 256M. Ter referentie: 134217728 is 128M en 536870912 is 512M. Het getal dat PHP afdrukt is de omvang van de reservering die uiteindelijk mislukte, niet de omvang van het onderliggende probleem, dus het vertelt je welk plafond je raakte en niet wat de oorzaak is.
Waarom verandert het bewerken van wp-config.php mijn PHP memory limit niet?
Je host begrenst PHP. WordPress stelt de limiet in door bij het laden ini_set aan te roepen, wat alleen werkt als de host ini_set toestaat en alleen tot de harde bovengrens van de host. Bevestig de actuele waarde met een bestandje van één regel in je webroot dat ini_get('memory_limit') echoot, en verwijder het daarna.
Waarom veroorzaakt php_value memory_limit in .htaccess een 500-fout?
php_value is een directive van Apache/mod_php, dus die gooit een 500-fout op nginx- of PHP-FPM-opstellingen. Verwijder de regel en gebruik in plaats daarvan een .user.ini-bestand in je webroot, of zet memory_limit in php.ini als je host je dat laat bewerken.
Is het veilig om de WordPress-geheugenlimiet op onbeperkt te zetten?
Nee. Onbeperkt geheugen lost een lek niet op; het laat een op hol geslagen request de hele server opslokken en kan elke andere site op dezelfde machine platleggen. Een plafond is een veiligheidsvoorziening. Crasht het bij 512M nog steeds, stop dan met verhogen en zoek de lus op.