Chyba APC cache: Unable to allocate memory for pool

Symptomy

Problém se ukazuje na náhodných místech, někdy v obsluze sessions, někdy při include/require. Chyby se objevují náhodně, někdy častěji, někdy méně často. Dočasně pomáhá restart webserveru. V logu najdete hlášení typu:

include_once(): Unable to allocate memory for pool.

Obvyklý zdroj problému

Zaplnění paměti APC Cache, způsobené buď její nedostatečnou velikostí, nebo příliš dlouhou dobou expirace položek z cache.

Kontrola

APC cache umožňuje zobrazit statistiky své efektivity pomocí skriptu apc.php. Jeho umístění se liší podle toho, jakým způsobem jste APC nainstalovali a na jakém jste systému. Pro Debian a Ubuntu zkuste:

/usr/share/doc/php-apc/apc.php.gz

Pro RHEL, CentOS, Scientific Linux:

/usr/share/pear/apc.php

Soubor překopírujte do document rootu webserveru (u Debianu/Ubuntu rozbalte) a prohlídněte si jej v prohlížeči. Uvidíte přehled stavu cache, včetně zabrané paměti. Problém bývá, máte-li téměř všechnu paměť zabranou. Po ukončení prohlížení nezapomeňte soubor zase smazat, případně si jej schovejte do zaheslované části webu.

Možná řešení

  • navýšení velikosti paměti – Můžete jednoduše navýšit paměť pro cache, navyšte parametr apc.shm_size tak, aby jste měli rezervu.
  • snížení doby expirace záznamu v cache – Tímto nastavením zajistíte rychlejší uvolňování záznamů z cache a paměť nedojde tak lehce. Zmenšete nastavení doby v parametru apc.ttl.

Konfiguraci apc najdete obvykle v /etc/php5/conf.d/apc.ini pro Debian/Ubuntu a v /etc/php.d/apc.ini pro RHEL/CentOS/Scientific Linux. Po změně nastavení v souboru restartujte webserver.

Použité zdroje

Komentování je uzavřeno.