
Kort svar: Fejlen betyder, at én PHP-request forsøgte at bruge mere hukommelse end dens effektive loft. Gem den fulde fatal-linje: tilladte bytes, ekstra bytes, fil, linje og tidspunkt. Se om requesten er frontend, admin, cron eller CLI, og find den handling, der vokser. Et moderat højere loft kan bruges som kontrolleret test, men løser ikke en memory leak, uendelig loop eller for stor batch.
Fagligt gennemgået: 28. august 2026
Kontrolgrundlag: WordPress 7.1, PHP 8.4.23 og Chrome 151 på isoleret staging. Et afgrænset memory-pressure-scenarie er målt med Hostious Article Lab 1.4.1 uden vedvarende ændringer; reelle grænser skal aflæses i den runtime, der fejler.
En typisk loglinje begynder med Allowed memory size of ... bytes exhausted. Den fortæller både loftet og den allokering, der fejlede. Filen på linjen er stedet, hvor PHP ikke kunne få mere hukommelse – ikke altid den komponent, der forbrugte det hele.
Før du ændrer noget: Tag backup af
wp-config.phpog den relevante PHP-konfiguration. Notér nuværende grænser. Sæt aldrigmemory_limit = -1på et live-site for at få testen igennem.
På denne side
Notér:
| Mønster | Sandsynlig retning | Kontrol |
|---|---|---|
| Fejl ved samme store importbatch | Batchstørrelse eller parser | Halvér batch på staging |
| Fejl ved hver almindelig sidevisning | Plugin/tema/query/autoload | Profiler request og isolér komponent |
| Kun admin/media fejler | Admin-loft eller billedbehandling | Site Health + PHP-log |
| Kun cron/CLI fejler | Andet runtime/ini eller jobdesign | Mål effektivt loft i samme runtime |
Loft ændres ikke efter wp-config.php | PHP-/FPM-adminværdi eller hostloft | Hostingens PHP-info |
I en fatal-linje som Allowed memory size of A bytes exhausted (tried to allocate B bytes) er A requestens effektive loft, mens B kun er den næste allokering, der mislykkedes. B fortæller ikke requestens samlede forbrug, og filen/linjen er ikke automatisk synderen. Omregn A til MiB ved at dividere med 1.048.576, og sammenlign med den målte runtimeværdi.
Gem også den nærmeste request-identifikator eller jobreference. To memory-fejl på samme sekund kan stamme fra forskellige workers: en frontendrequest, billedgenerering og en køopgave kræver hver sin reproduktion. Hvis logformatet ikke har request-ID, kan URL, cron-hook, CLI-kommando eller inputfil bruges som afgrænsning uden at gemme persondata.
WordPress har WP_MEMORY_LIMIT til almindelige requests og WP_MAX_MEMORY_LIMIT til visse adminopgaver. PHP har sit eget memory_limit, og hosting/container kan have et yderligere loft. Den laveste ufravigelige begrænsning vinder i praksis.
Se Værktøjer → Webstedssundhed → Info → Server/WordPress constants eller hostingens PHP-info. Kontrollér også den runtime, der fejler: web-FPM, cron og CLI kan læse forskellige konfigurationsfiler.
Skriv værdierne ned før ændring. En konstant i wp-config.php er ikke bevis for, at PHP accepterede værdien.


Kun hvis den nuværende grænse er lav i forhold til en legitim, afgrænset opgave, kan du teste et moderat højere loft:
define( 'WP_MEMORY_LIMIT', '128M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
Tallene er eksempler, ikke anbefalede standarder. Vælg ud fra nuværende loft, hostingens kapacitet, requesttype og den målte opgave. Placér konstanterne før WordPress indlæser wp-settings.php, og undgå dubletter.
Gentag præcis samme handling én gang. Hvis den nu lykkes, har du vist, at loftet var en del af problemet – ikke nødvendigvis at årsagen er sund. Mål om forbruget ligger stabilt under det nye loft.
Arbejd på staging og gør input mindre:
Typiske dokumenterbare mønstre er meget store billedfiler, hele datasæt indlæst i arrays, rekursion, gentagne queries, builderdata eller plugins, der behandler alle poster i én request. Løsningen er ofte chunking/paginering, lavere billeddimensioner eller rettet kode – ikke kun mere RAM.
Filen i fatal-linjen kan være wpdb, billedbibliotek eller core, selv om en tredjepart kaldte den i en løkke. Brug call stack/profilering til at finde den kaldende funktion.
Hvis flere PHP-workers hver kan bruge et højt loft, kan et stort memory_limit gøre hele serveren ustabil. Sammenhold derfor:
Et enkelt requestloft på 512 MB er ikke gratis, hvis ti workers kan ramme det samtidig. Få hosting til at vurdere poolen, hvis en legitim arbejdsgang kræver en stor permanent grænse.
Efter en hævning skal du se efter:
Hvis fejlen flytter sig, ruller du grænsen tilbage og retter jobdesignet eller komponenten. Mere hukommelse skjuler ellers problemet til næste større datasæt.
En god stagingtest bruger mindst tre kendte inputstørrelser. For en import kan det være 50, 100 og 200 rækker; for billeder tre kendte pixelstørrelser; for en rapport et stigende antal poster. Registrér peak memory og køretid i samme runtime.
| Input | Peak memory | Køretid | Resultat | Tolkning |
|---|---|---|---|---|
| Lille kontrol | Mål værdi | Mål tid | Bestået/fejl | Baseline og fast overhead |
| Dobbelt input | Mål værdi | Mål tid | Bestået/fejl | Viser om væksten er omtrent lineær |
| Større realistisk input | Mål værdi | Mål tid | Bestået/fejl | Kontrollerer margin til loft/timeouts |
Hvis memory vokser omtrent proportionalt med input, er batching eller streaming normalt den robuste løsning. Hvis forbruget accelererer, eller samme input bruger mere ved hver gentagelse, skal du lede efter akkumulerede objekter, caches, rekursion eller en loop. Hvis et lille input allerede ligger tæt på loftet, er plugin-/temabaseline, autoloadede data og fast request-overhead mere relevant.
Mål med samme værktøj i alle runder. Site Health viser konfiguration, ikke nødvendigvis requestens peak. Et profileringsplugin kan selv påvirke memory, så notér profilerens version og lav også en kontrolrunde uden profiler, hvis forskellen er lille.
Tag udgangspunkt i det samme datasæt og samme requesttype. Før ændringen registreres effektivt loft, peak, køretid og fatal-linje. Efter en kode-/batchrettelse køres først den tidligere fejlende størrelse og derefter én realistisk større kontrol. Slutresultatet skal ikke blot “virke”; peak skal have en forklarlig og sikker margin, og køretiden må ikke være flyttet over platformens timeout.
Når løsningen er batching, skal du også verificere fuldstændighed: antal behandlede poster, fejlede poster, dubletter og et checksum-/tællepunkt før og efter. En batch, der holder memory nede ved at springe data over, har ikke bestået.
Test til sidst parallelitet i et afgrænset miljø. To samtidige legitime jobs må ikke presse workerpoolen over containerens loft. Start ikke en ukontrolleret belastningstest; brug den normale maksimale samtidighed, som arbejdsgangen faktisk tillader, og følg RAM/OOM-events.
Gendan wp-config.php/PHP-konfiguration fra backup, fjern dublerede konstanter, og genstart kun den relevante PHP-pool, hvis platformen kræver det. Hvis du reducerede batch eller deaktiverede en komponent, genskab den oprindelige tilstand på staging og behold den dokumenterede produktionsløsning.
Skal loftet hæves vedvarende, for at helt almindelig drift kan køre, er hostingpakken for lille til sitet. Sammenlign planerne og se, hvad der følger med på hvert niveau.
Hosting skal hjælpe, når PHP ikke accepterer grænsen, FPM-adminværdier styrer den, eller RAM/OOM/workerpool er problemet. Udvikleren skal have fatal-linje, reproducerbar request, inputstørrelse og memoryprofil. Hostious WordPress-support kan hjælpe med begge lag.
Saml tallene fra den samme runtime og den samme reproducerbare handling:
Gem fatal-linjen, den effektive konfiguration i samme runtime og peak-forbruget fra eftertesten. Fjern absolutte kundestier.
Ikke som første skridt. Fejlen fortæller, HVILKEN fil der brugte hukommelsen op – find den handling først. Et højere loft uden diagnose skjuler ofte et plugin, der lækker hukommelse.
256 MB er en fornuftig ramme for de fleste sites med WooCommerce; 512 MB til tunge imports. Definer WP_MEMORY_LIMIT i wp-config.php – og husk at serverens PHP-limit skal være mindst lige så høj.
Fordi netop de jobs behandler mange data i én request. Kør store opgaver i mindre bidder, via WP-CLI eller på tidspunkter med lav trafik – så undgår du at presse frontend samtidig.