Foros del Web » Programando para Internet » PHP » Symfony »

Limpiar memoria constantemente

Estas en el tema de Limpiar memoria constantemente en el foro de Symfony en Foros del Web. Hola que tal les comento mi problema. Tengo un script que hice para ejecutarlo como tarea de gearman, el proyecto esta en symfony 1.4. Esta ...
  #1 (permalink)  
Antiguo 21/12/2012, 13:05
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Limpiar memoria constantemente

Hola que tal les comento mi problema.
Tengo un script que hice para ejecutarlo como tarea de gearman, el proyecto esta en symfony 1.4. Esta tarea hace uso de doctrine porque comprueba ciertas cosas y envia notificaciones push. El problema es que esta tarea consume mucha ram y va subiendo hasta que alcanza el limite y se corta sola, ayer haciendo pruebas la deje corriendo y alcanzo los 2gb de ram, hay alguna forma de optimizar la memoria de php o resetearla? tambien lei que la memoria de doctrine se puede optimizar pero no se como
Ayuda porfa.
Gracias de antemano
__________________
>> abimaelmartell.com
  #2 (permalink)  
Antiguo 21/12/2012, 13:28
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Limpiar memoria constantemente

Es que ese combo es mortal, la tortuga de sf 1.x + el dinosaurio de d1 = leak 'em all :P, fuera de bromas, primero, de lo que hay por la web que has probado para bajar el leak ?, segundo puedes postear algo de código ?(no tiene porque ser completo pero al menos algo para tener una idea)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 21/12/2012, 13:58
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Limpiar memoria constantemente

Código PHP:
Ver original
  1. <?php
  2. clase....
  3.     /**
  4.      * jlkafjglfkjalkjflgjaflkgjalkgjflakjlkfga
  5.      * @param GearmanJob $job
  6.      * @param sfGearmanWorker $worker
  7.      */
  8.     public static function in($job, $worker){
  9.         $data = json_decode($job->workload());
  10.         $algo = AlgunaTable::getInstance()->find($data->id);
  11.         $push = Push::getInstance();
  12.         while(true){
  13.             $algo->clean();
  14.             $algo->request();
  15.             # Enviar notificaciones
  16.            if($algo->canStart()){
  17.                 $push->sendUpdates($algo);
  18.             }
  19.         }
  20.     }
seria algo asi, lo simplifique y le cambie algunas palabras :P
__________________
>> abimaelmartell.com
  #4 (permalink)  
Antiguo 21/12/2012, 14:29
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Limpiar memoria constantemente

En ese fragmento de código esta el leak ?, no hay mucho espacio para la mejora, en algún momento "muere" el while ?, estas manejando colecciones dentro en los métodos que muestras ?, fuera de esto, que versión de PHP estas utilizando ?, si es 5.2.x, la entidad tiene referencias circulares ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 21/12/2012, 14:39
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Limpiar memoria constantemente

si es 5.2 :/, y también maneja referencias circulares, y colecciones tambien
__________________
>> abimaelmartell.com
  #6 (permalink)  
Antiguo 21/12/2012, 14:48
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Limpiar memoria constantemente

el problema es que va subiendo y subiendo la cantidad de ram :S
__________________
>> abimaelmartell.com
  #7 (permalink)  
Antiguo 21/12/2012, 15:06
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Limpiar memoria constantemente

Claro, el tema es que primero deberías identificar donde se produce el leak, porque puede ser PHP mismo..., el tema de las referencias circulares es algo que recién se soluciono en la versión 5.3.

Te dejo un par de referencias,
http://docs.doctrine-project.org/pro...rformance.html
http://php.net/manual/pt_BR/features...iderations.php(mira que lindo escala la gráfica en PHP 5.2)

Si puedes aplica las mejoras que comenta la gente de doctrine y en la medida de lo posible ejecuta el código en PHP 5.3 a ver si el problema persiste en esa versión.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 21/12/2012, 15:17
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Limpiar memoria constantemente

si, lo ejecute en mi maquina con php 5.4.laultima y si consume menos, pero sigue alcanzando cifras exajeradas, aunque si veo conveniente actualizar la del server tambien, le comentare eso al cliente.
Otra cosa, no hay alguna manera de liberar la memoria? es decir cuando alcanze pordecir los 200mb "resetear" el script sin tener que hacerlo manualmente?
Saludos y gracias por la info :D
__________________
>> abimaelmartell.com
  #9 (permalink)  
Antiguo 21/12/2012, 15:29
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Limpiar memoria constantemente

En ese caso ya es un tema del código y no de PHP, como te comente antes, intenta aislar el lugar exacto donde se produce el leak(aunque sea a base de ir comentando de a lineas...), y sobre el "reseteo", podrías utilizar algún workaround pero no va a eliminar el problema simplemente lo va a ocultar.
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 21/12/2012, 15:39
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Limpiar memoria constantemente

si, creo que voy a tener que revisarr los modelos para ver que puedo optimizar
Gracias por todo :)
__________________
>> abimaelmartell.com

Etiquetas: doctrine
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:21.