2011-07-02 26 views
9

Cuando me conecto a mi aplicación web que muestra un error como:Fatal error: Permitido el tamaño de la memoria de bytes 134217728 agotados (intentó asignar 87 bytes)

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes) in /gt/2.ps.fo/home/hft/domains/console.fo.spalgo.com/public_html/cake/libs/model/datasources/dbo/dbo_mysql.php on line 775

¿Hay alguna solución para resolver este problema? ¿Por qué obtengo este error?

+0

Significa que su código está haciendo algo que utiliza toda la memoria disponible. Solucione el problema para que use menos memoria y/o menos. – deceze

Respuesta

9

Eso suena como que ha asignado more memory than PHP will allow. Edite la configuración memory_limit en la configuración de su sitio php.ini como se describe en la página vinculada.

Otra posibilidad (menos probable) es que haya alcanzado los límites de recursos setrlimit(2) para su usuario o grupo. Consulte /etc/security/limits.conf para conocer los límites que pueden establecerse para su servidor web, junto con los scripts de inicialización que inicien su entorno de servidor y el entorno de intérprete de PHP.

+0

Aunque ambas afirmaciones son probables, es más probable que esté relacionada con el límite de memoria; sin embargo, al aumentarla, pensó que la resolvería, quizás no sea la correcta, ya que tiene que comprobar por qué un solo script asigna tanta memoria. . Para complementar tu respuesta, agregué otra. – AlphaZygma

+0

@AlphaZygma, gracias. – sarnold

3

El primer ejemplo que encontré buscando en SO de "PHP fuera de la memoria" es this one

1

Intente utilizar echo en lugar de almacenar primero lo que está imprimiendo en una variable.

1
ini_set('memory_limit', '-1'); 
+0

Por -1, liberará la memoria y se puede filtrar.Debe evitar esta configuración, usarla cuando no tiene otra opción. –

1

Mirando el archivo que lanzó la excepción grave (dbo_mysql.php) supongo que su llamada está recuperando datos de la base de datos.

Además, al mirar el límite de memoria, muestra 134217728 bytes, que es 128MB, así que creo que cualquiera que sea su llamada API, está tratando de obtener una gran cantidad de datos que superan el límite asignado por script.
Por ejemplo, si el último script en la pila de llamadas API usara 20MB para sus necesidades y luego se cansa para obtener datos del DB vale 115MB, su script estaría tratando de asignar 135MB que ya es 7MB más que el límite y causando el Fatal Exception.

Por lo tanto, veo un par de cosas para ver/hacer:

  1. Que no se está recuperando datos innecesarios, o en otras palabras, recuperar sólo lo que necesita.
  2. Si usted necesita de hecho todos esos datos, entonces
    • o bien aumentar el valor memory_limit bajo su archivo php.ini
      contra: Si los datos sigue creciendo, puede que tenga que mantener la actualización de este valor para el único secuencia de comandos y exposición a sí mismo a pérdidas de memoria o quedarse sin memoria.
    • O le recomendaría implementar algún tipo de paginación (que le permitirá mantener los límites de memoria bajo control) y hacer que su aplicación sea más escalable.
Cuestiones relacionadas