Este mensaje significa que una sola petición de PHP intentó retener en memoria más de lo que se le permite. El límite es por petición, no por servidor: un límite de 256M no quiere decir que el servidor tenga 256M.

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

134217728 son 128M. El número del mensaje es siempre el límite vigente, así que nunca tiene que ir a buscarlo.

Dónde subirlo

  • EGPNL: los ajustes de PHP del sitio, que es el sitio correcto porque sobrevive a las actualizaciones.
  • php.ini: memory_limit = 256M, para todo el pool.
  • wp-config.php: define("WP_MEMORY_LIMIT", "256M"); solo para WordPress.
Un límite por encima de 512M casi siempre esconde un fallo. Leer una tabla entera a un array, o un archivo entero en vez de recorrerlo en flujo, hay que arreglarlo, no alimentarlo.

Encuentre qué se la está comiendo

echo round(memory_get_peak_usage(true)/1048576, 1) . ' MB';

Ponga eso al final de la página lenta y le imprimirá el pico. Luego bisecte: comente la mitad del trabajo y mire a qué mitad sigue el pico.

Las dos causas habituales

  • Una consulta sin tope. Un SELECT sin LIMIT sobre una tabla que ha crecido. Recórrala por páginas.
  • Una biblioteca de imágenes sobre un archivo grande. Una fotografía de 6000 px cuesta en memoria mucho más de lo que sugiere el tamaño del archivo, porque una vez cargada está descomprimida.
Una tarea programada que falla con 128M y funciona con 512M no está arreglada. Volverá a fallar cuando crezcan los datos, a las tres de la madrugada.