Portada: error Allowed memory size exhausted en WordPress

Error «Allowed memory size exhausted» en WordPress: causas y cómo solucionarlo

Estás subiendo un plugin, una imagen grande o actualizando algo, y WordPress responde con una pantalla blanca, un «Ha habido un error crítico en esta web» o este mensaje:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

Es de los errores más comunes de WordPress y casi siempre se arregla en un par de minutos. Pero conviene entender qué pasó antes de subir el límite a ciegas, porque a veces el límite no es el problema. Aquí lo explico, con lo que comprobé en un WordPress local y lo que depende de tu hosting.

Qué significa el error

PHP le da a cada petición una cantidad máxima de memoria, el memory_limit. Cuando una página, un plugin o una tarea intenta usar más, PHP la corta de golpe y lanza ese error fatal. El número del mensaje está en bytes: 134217728 son 128 MB. El segundo número (tried to allocate) es lo que intentaba reservar justo cuando se pasó, no lo que necesitas en total.

Hay dos límites que se mezclan, y es la confusión más habitual:

  • El de PHP (memory_limit), que pone el servidor en su configuración.
  • El de WordPress (WP_MEMORY_LIMIT), que es la cantidad que WordPress intenta pedirle a PHP.

Según el código de WordPress que usé para estas pruebas, el valor por defecto de WP_MEMORY_LIMIT es de 40 MB (64 MB si es multisitio). En el panel de administración y al procesar imágenes, WordPress puede pedir hasta 256 MB (WP_MAX_MEMORY_LIMIT).

Ilustración: un cubo transparente lleno de bloques azules que rebosa con bloques rojos, que representa la memoria de PHP llena

Cómo ver cuánta memoria tienes

Antes de cambiar nada, mira el valor actual. En el escritorio de WordPress ve a Herramientas → Salud del sitio → Información → Servidor. Ahí aparece el «PHP memory limit» y, en Constantes de WordPress, el WP_MEMORY_LIMIT.

Ilustración: un dial circular con un arco rojo que marca el límite, que representa el medidor de memoria

Tres formas de subir el límite

1. En wp-config.php (la primera que debes probar)

Antes de la línea /* That's all, stop editing! */, añade:

define( 'WP_MEMORY_LIMIT', '256M' );

Comprobé en local cómo se comporta. Con PHP limitado a 32 MB:

ConfiguraciónLímite que usa WordPress
Sin tocar nada40 MB
WP_MEMORY_LIMIT en 128M128 MB
PHP en 512 MB, sin tocar nada512 MB

Dos cosas importantes de esa prueba: WordPress sube el límite de PHP hasta el valor de WP_MEMORY_LIMIT, pero nunca lo baja. Si tu hosting ya da 512 MB, poner 256M no te quita memoria. Y esta vía solo funciona si el hosting permite cambiar el límite desde PHP; algunos lo bloquean, y entonces hay que usar las siguientes.

2. En php.ini

Si tienes acceso a la configuración de PHP (un VPS, un servidor propio o un panel que lo permita), cambia esta línea y reinicia el servidor web:

memory_limit = 256M

En hosting compartido, muchos paneles tienen una pantalla de «Configuración de PHP» o «Selector de PHP» donde se cambia este valor sin tocar archivos. Dónde está y cómo se llama depende de tu proveedor.

3. En .htaccess

Si tu sitio corre con Apache y PHP como módulo, puedes añadir al .htaccess de la raíz:

php_value memory_limit 256M

Si el hosting usa PHP en modo FastCGI o PHP-FPM, esta directiva no se acepta y puede dejar el sitio con un error 500. Si pasa, borra la línea y usa otra de las vías. Haz una copia del .htaccess antes de editarlo.

Ilustración: tres interruptores en fila con el del centro encendido en rojo, que representan las tres formas de subir el límite

Si subir el límite no basta

Si con 256 MB sigue fallando, o el error vuelve a las pocas horas, subir el número solo esconde el problema. Algo está gastando demasiada memoria. Cómo buscarlo:

Primero activa el registro de errores en wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Los errores quedan en wp-content/debug.log sin mostrarse a los visitantes. Desactívalo cuando termines. Después:

  1. Reproduce el error y abre wp-content/debug.log.
  2. Lee la ruta del error. El mensaje termina con el archivo y la línea donde se agotó la memoria. Si la ruta contiene wp-content/plugins/nombre-del-plugin/, ya sabes cuál es.
  3. Desactiva el plugin sospechoso y comprueba si el error desaparece. Si era necesario, busca una alternativa más ligera o escríbele a su soporte.
  4. Revisa qué hacías: importar un archivo enorme, regenerar miniaturas de toda la biblioteca o una copia de seguridad suelen consumir mucha memoria de una sola vez.

Cuantos menos plugins tengas, menos memoria gasta cada visita. Es una de las razones por las que reduje mi instalación a dos, como cuento en cómo pasé de 34 a 97 en PageSpeed.

Lo que no conviene hacer

  • Poner un límite enorme (1 GB o -1, sin límite) para «no volver a ver el error». Un plugin con un bucle roto puede tragarse toda la memoria del servidor y afectar a otros sitios.
  • Editar archivos sin copia. wp-config.php y .htaccess mal escritos dejan el sitio caído.
  • Dar por resuelto sin comprobar. Después de cambiar el límite, repite la acción que fallaba.

Lo que probé y lo que no

  • Probé: el comportamiento de WP_MEMORY_LIMIT y WP_MAX_MEMORY_LIMIT (valores por defecto, cuándo sube el límite de PHP y que nunca lo baja) en un WordPress local con PHP 8.3, y el texto del error fatal.
  • No probé: php.ini y .htaccess en hosting real, ni los paneles de cada proveedor. Las describo como funcionan en general; compruébalo en el tuyo.

¿Tu sitio se queda sin memoria y no sabes por qué?

Si el error persiste o no encuentras qué lo causa, puedo revisar tu WordPress y decirte qué lo provoca. Escríbeme desde aquí.

¿Tienes un proyecto web en mente?

Un sitio, una tienda, una aplicación o una mejora: cuéntame qué necesitas y te respondo con una propuesta clara.

Contáctame

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *