Aumentar el límite de memoria de un script en PHP

La configuración por defecto de un servidor LAMP es válida para el correcto funcionamiento de la mayoría de las páginas web. Sin embargo, si ejecutamos aplicaciones que necesitan de una gran cantidad de recursos del sistema es posible estos valores se nos queden cortos en algunos momentos.

Aumentar el límite de memoria de un script en PHP

Y uno de esos valores que a veces se quedan cortos es la cantidad de memoria máxima que un script desarrollado en PHP puede consumir, así que hoy veremos como aumentar ese límite.

Fatal error: Allowed memory size of 134217728 bytes exhausted

Alcanzar el límite máximo de memoria de nuestro servidor no es algo demasiado habitual. La configuración por defecto tiene un valor lo suficientemente amplio como para que podamos ejecutar la mayoría de las aplicaciones sin problema alguno. Pero en caso de alcanzarlo,el sistema devuelve el siguiente error:

Fatal error: Allowed memory size of 134217728 bytes exhausted

Con la salvedad de que el número de bytes puede variar en función de la configuración del servidor.

Medida de protección

Que PHP disponga de un límite máximo de consumo de memoria en la ejecución de cada script es una medida de protección, no olvidemos que la memoria en una máquina es un recurso finito. Así que antes de ampliar este parámetro, mi consejo es que nos aseguremos de que:

  1. No es un bug en nuestro script el que crea la necesidad de ampliar la memoria.
  2. Nuestro script está razonablemente optimizado.

Es decir, nada que no debamos hacer con cualquier otro script que no supere el límite máximo de memoria definido. Porque si recordáis una de las primeras lecciones que aprendemos (o al menos que deberíamos aprender) al comenzar a programar es que nuestro código debe cumplir tres requisitos fundamentales:

  1. Estar libre de errores
  2. Ser eficiente
  3. Ser comprensible

Cómo aumentar el límite máximo de memoria para un script PHP

Por defecto, el límite máximo de memoria que un script PHP puede consumir es de 128Mb, algo más que razonable. Si ya tenemos claro que queremos aumentar este límite podemos hacerlo de dos formas.

Con la función init_set()

Con la función init_set() pasando el string memory_limit como primer parámetro y la cantidad de memoria deseada como segundo. Con este método, el nuevo limite afectará única y exclusivamente al script dónde lo estemos utilizando, es decir, sin afectar a la configuración general del servidor.

<?php

ini_set('memory_limit', '256M');

...

?>

En el archivo php.ini

En este caso, la principal diferencia con respecto al método anterior es que el nuevo límite afectará a todos los scripts PHP que se ejecuten en el servidor dónde apliquemos esta configuración. Para definir el nuevo límite, buscamos la directriz memory_limit, dentro de la sección Resources Limits, en el archivo php.ini y modificamos su valor.

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

...

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit=256M

Y acto seguido reiniciamos el servidor Apache 2 para que los cambios surtan efecto.:

sudo service apache2 restart

La ubicación del archivo php.ini variará en función del sistema que estemos utilizando. En los sistemas Linux basados en Debian como Ubuntu la ubicación será /etc/php/X.X/apache2, donde X.X será la versión de PHP.

Comprobar límite máximo de memoria de un script PHP

Podemos comprobar el valor máximo de memoria que utiliza un script configurado en nuestro servidor en la sección Core de la salida de la función phpinfo():

phpinfo() memory_limit

O como acabamos de ver, accediendo al archivo de configuración php.ini:

php.ini memory_limit

Créditos, referencias y artículos relacionados

Deja un comentario

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