Co je PHP memory_limit
PHP memory_limit určuje, kolik paměti na serveru může jednotlivý skript PHP (neboli PHP worker) maximálně využít pro vykonání určité operace.
Tento limit chrání server před nadměrnou spotřebou paměti jedním skriptem. Brání tak přetížení serveru nebo jeho výpadku.
PHP memory_limit tedy zajišťuje fér podmínky pro všechny uživatele serveru (všechny weby). Každý web jej může vytěžovat rovnoměrně, tak, aby nezpomaloval weby ostatních.
Každý poskytovatel webhostingu si určuje PHP memory_limit dle svého uvážení.
Memory_limit je uveden v souboru php.ini a obvykle je nastavován v megabajtech (např. u Webglobe je PHP memory_limit nastavený na 512 MB.
Překročení PHP memory_limit
Překročí-li PHP skript nastavený memory_limit, server jej okamžitě zastaví a zobrazí chybu typu Allowed memory size exhausted, často s uvedením přesného limitu, který byl překročen.
Tato chyba může být doprovázena stavovým kódem 500 (Internal Server Error), pokud server nedokáže požadavek splnit kvůli vyčerpání zdrojů.
TIP: Pro PHP existují i další limity, např. max_execution_time.
Co vede k vyčerpání PHP memory_limit
- Složitý nebo náročný kód webu, např. zpracování velkých datových souborů nebo složité výpočty.
- Náročné pluginy nebo šablony u systémů, jako je WordPress.
- Manipulace s velkými obrázky či soubory (proto si poskytovatelé webhostingů určují také upload_max_filesize.
- Přetížení serveru při vysokém počtu současných požadavků, například při velké návštěvnosti nebo DDoS útoku.
Jak vyčerpání PHP memory_limit řešit?
Na vlastním serveru si PHP memory_limit navýšite v souboru php.ini.
U webhostingu je však pevně daný a měnit jej nelze.
Pro dlouhodobé řešení problému bude třeba:
- optimalizovat kód stránky a omezenit náročné pluginy
- použít cachování k omezení potřeby opakovaného zpracování náročných skriptů
- aktualizovat na nejnovější verzi PHP, která je méně náročná na paměť
- zvážit využití CDN, aby se zabránilo náhlému zvýšení zátěže.