Error fatal: tamaño de memoria permitido de 134217728 bytes agotados

5 minutos de lectura

Avatar de usuario de ArcticZero
ArcticZero

Tengo un montón de sistemas de punto de venta (POS) de clientes que periódicamente envían nuevos datos de ventas a una base de datos centralizada, que almacena los datos en una gran base de datos para la generación de informes.

El POS del cliente está basado en PHPPOS, y he implementado un módulo que usa la biblioteca estándar XML-RPC para enviar datos de ventas al servicio. El sistema del servidor se basa en CodeIgniter y utiliza las bibliotecas XML-RPC y XML-RPCS para el componente de servicio web. Cada vez que envío una gran cantidad de datos de ventas (tan solo 50 filas de la tabla de ventas y filas individuales de sales_items pertenecientes a cada artículo dentro de la venta), aparece el siguiente error:

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

128M es el valor predeterminado en php.ini, pero supongo que es un gran número para romper. De hecho, incluso he intentado establecer este valor en 1024M, y todo lo que hace es tardar más tiempo en generar un error.

En cuanto a los pasos que tomé, intenté deshabilitar todo el procesamiento en el lado del servidor y lo arreglé para devolver una respuesta enlatada independientemente de la entrada. Sin embargo, creo que el problema radica en el envío real de los datos. Incluso intenté deshabilitar el tiempo máximo de ejecución de secuencias de comandos para PHP, y todavía sale el error.

  • Estoy un poco confundido… ¿dónde ocurre el error, en el cliente o en el servidor? ¿Y en qué etapa… envío del cliente, recepción del servidor, procesamiento del servidor, envío del servidor, recepción del cliente o procesamiento del cliente?

    – Greg

    18 de febrero de 2009 a las 13:39

  • El error parece ocurrir durante el envío del cliente o durante la recepción del servidor. Intenté deshabilitar todo el procesamiento del servidor y configurarlo para enviar una respuesta enlatada independientemente de los datos enviados. El error ocurre si envío una cierta cantidad de datos. Estoy cambiando la configuración de PHP.ini.

    – ArcticZero

    18 de febrero de 2009 a las 16:04

  • el límite de memoria es de 128 MB, solución: ini_set('memory_limit', '256M');

    usuario669677

    2 de agosto de 2013 a las 10:49

  • El resumen rechazó todas las respuestas de “simplemente ignore la fuga”, las personas que confundieron CodeIgniter con Drupal y las personas que simplemente copiaron y pegaron las respuestas de otras personas para obtener puntos. La calidad de las respuestas en este es abismal.

    –Matti Virkkunen

    12 de diciembre de 2013 a las 9:38

  • Posible duplicado del tamaño de memoria permitido de 33554432 bytes agotado (intentó asignar 43148176 bytes) en php

    – Damjan Pavlica

    6 de julio de 2016 a las 8:05

  • @williamcarswell; -1 es un valor que PHP entiende como ilimitado en este contexto.

    – Alix Axel

    9 de noviembre de 2013 a las 12:27

  • @ArseniuszŁozicki: también consumirá recursos del servidor no poder repuesto.

    –Ken Williams

    2 de febrero de 2014 a las 3:48

  • Es una pena que esto tenga tantos votos a favor. Configurarlo en un valor preciso, ya sea con ediciones de php.ini o ini_set, es una solución perfectamente válida cuando las personas necesitan más memoria. Establecerlo en ilimitado es un truco peligroso 🙁

    –Jeff Davis

    7 de marzo de 2014 a las 15:38

  • @ user1767586 luego configúrelo en un valor sensato. Puede evitar que el script arroje el error configurándolo en 1024M. Si esta respuesta dice ini_set(‘memory_limit’, ‘1024M’); Podrías copiar y pegar eso y estar bien. Al configurarlo en -1, se está configurando para tener un script que consume toda la memoria. Especialmente si haces esto de forma rutinaria. Poner “peligroso” entre comillas no lo hace menos peligroso. Realmente podría limpiar su servidor host. Tal vez empezar a destruir datos. No sé, ¿quizás pierdas tu trabajo? Suena bastante peligroso para mí. 😐

    –Jeff Davis

    26 mayo 2014 a las 14:36

  • Es triste ver que la respuesta para +161 votos y -3 votos es la misma 🙁

    – akarthik10

    21 de agosto de 2015 a las 12:10

  • Honestamente, si está almacenando en caché una gran cantidad de datos, esta es la respuesta correcta. 128M no es suficiente para ciertos scripts. 512M o 1024M a menudo serán suficientes, pero debe decidir caso por caso.

    –Jeff Davis

    07/03/2014 a las 15:36

  • Sí, sin embargo, trate de evitar un uso excesivo de la memoria, si la cantidad de usuarios va a ser mayor.

    – Basav

    9 de julio de 2014 a las 10:23

  • límite_memoria = -1 ; establecido en php.ini

    usuario285594

    04/08/2014 a las 18:24

  • @YumYumYum Eso elimina el límite de memoria, que solo desea si está monitoreando el uso de la memoria de otra manera. El sistema operativo matará el proceso si está tomando una gran cantidad de memoria en algún momento de cualquier manera.

    – Flamm

    10 de septiembre de 2015 a las 10:38

  • Entonces, si está ejecutando un script que usa mucha memoria, pero solo necesita ejecutarlo una vez, ¿puede simplemente aumentar el límite de memoria para el proceso en el momento de la ejecución y luego reducir su límite de memoria nuevamente después de que se ejecuta su único script?

    – cromecris

    16 de febrero de 2020 a las 2:37

  • Gracias, no pensé en verificar si alguien había establecido el valor en .htaccess que estaba anulando php.ini y no pude entender por qué +1

    – HostMyBus

    16 de junio de 2016 a las 10:08

  • Para cualquiera que necesite configurar temporalmente con comandos: php -d memory_limit=256M your_php_file.php o php -d memory_limit=256M artisan ...

    – El Anh Nguyen

    11 de diciembre de 2020 a las 6:12

  • Gracias, no pensé en verificar si alguien había establecido el valor en .htaccess que estaba anulando php.ini y no pude entender por qué +1

    – HostMyBus

    16 de junio de 2016 a las 10:08

  • Para cualquiera que necesite configurar temporalmente con comandos: php -d memory_limit=256M your_php_file.php o php -d memory_limit=256M artisan ...

    – El Anh Nguyen

    11 de diciembre de 2020 a las 6:12

  • te refieres a ini_set('memory_limit', '8192M'); ?

    – Gógol

    6 de enero de 2016 a las 14:17


  • Qué lujo sería tener tiempo para ir y optimizar un guión para algo así. O investigue, compare y aprenda herramientas ETL o algo así. En el mundo real, aumentamos la asignación de memoria, hacemos las cosas y seguimos adelante.

    – Mateo Poer

    10 de mayo de 2018 a las 2:58

  • 22 millones de registros ☠️

    – Tofandel

    26 de agosto de 2022 a las 21:12

¿Ha sido útil esta solución?