Ce message veut dire qu'une seule requête PHP a essayé de garder en mémoire plus que ce qui lui est permis. La limite est par requête, pas par serveur : une limite de 256M ne signifie pas que le serveur a 256M.
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
134217728, c'est 128M. Le nombre du message est toujours la limite en vigueur, vous n'avez donc jamais à la chercher.
Où l'augmenter
- EGPNL - les réglages PHP du site, et c'est le bon endroit parce que cela survit aux mises à jour.
- php.ini -
memory_limit = 256M, pour tout le pool. - wp-config.php -
define("WP_MEMORY_LIMIT", "256M");pour WordPress seul.
Une limite au-dessus de 512M cache presque toujours un bogue. Lire une table entière dans un tableau, ou un fichier entier au lieu de le lire en flux, demande une correction et non de la nourriture.
Trouver ce qui la dévore
echo round(memory_get_peak_usage(true)/1048576, 1) . ' MB';
Mettez cela à la fin de la page lente et elle imprime le pic. Puis dichotomisez : commentez la moitié du travail et regardez quelle moitié le pic suit.
Les deux causes habituelles
- Une requête sans borne. Un SELECT sans LIMIT sur une table qui a grossi. Parcourez-la page par page.
- Une bibliothèque d'images sur un gros fichier. Une photo de 6000 px coûte en mémoire bien plus que ne le laisse croire la taille du fichier, car une fois chargée elle est décompressée.
Une tâche cron qui échoue à 128M et marche à 512M n'a pas été réparée. Elle échouera de nouveau quand les données auront grossi, à trois heures du matin.