Buenas a todos,Tras varios días de uso con el Using y todas las conexiones cerradas, el log va guardando datos pero, no he tenido que hacer la chapuza de forzar al GC a que pase. Doy por concluido el Poltergeist del comebasuras.
Muchas gracias a todos! El jue 08 may 2014 14:42:41 CEST, Carlos Melgarejo escribió:
Buenas a todos, la coña de todo esto es que ese webservice me toco a mi picarlo. En principio, uso el "using" para hacer que se autocierre el connection. Ahora voy a hacer que explícitamente se cierren las conexiones y los readers, a ver si con esto soluciono algo. Sino, lo ultimo que queda es que pase un colector cada noche. De todos modos, se pondrá un log para ver el uso de memoria en cada acción y tal. Muchas gracias por todo, os diré si algo cambia. El 6 de mayo de 2014, 14:08, vfmBOFH <vfmbofh@xxxxxxxxx <mailto:vfmbofh@xxxxxxxxx>> escribió: El 6 de mayo de 2014, 14:03, SinnerBOFH <sinnerbofh@xxxxxxxxx <mailto:sinnerbofh@xxxxxxxxx>> escribió: ¿Programador HINGENIERO Gafapastoide? Es que me lo imagino, en plan Modernet De Merda con un WindowsPhone Chupiguai A todo esto, recuerdo como PoetaBOFH derribó un MySQL tuneado en un Proliant nuevecito al no cerrar las conexiones a la base de datos. En PEHACHEPE fuloso. ************************************************************************************** Su solución era meter un cronjob para reiniciar el servidor por la noche. ************************************************************************************** A ver qué te crees tú que tengo montado yo en la rubia para que el MySQL de Blogdrake aguante xD. El Drupal ha pasado por tantas manos que no hay por dónde atacar para plantearse siquiera una actualización. Ejqueeee Salut, SinnerBOFH On May 5, 2014, at 8:21 PM, vfmBOFH <vfmbofh@xxxxxxxxx <mailto:vfmbofh@xxxxxxxxx>> wrote:En este caso concreto, es que el programador es así de estupendo, el hombre... BTW, correo enviado desde mi flamante instalación de Open-Xchange. Mola QTCEl 6 de mayo de 2014 a las 1:31 Wardog <wardogyelmundo@xxxxxxxxx <mailto:wardogyelmundo@xxxxxxxxx>> escribió: Los programadores suelen sobreestimar el tiempo "perdido" en conectar a la base de datos pero se la pela muchísimo optimizar las consultas y los bloqueos de tabla. He visto cosas que no creeríais. Esas dos simples chorradas bien hechas me han conseguido aumentos de rendimiento del 4.000% El 6 de mayo de 2014, 0:54, vfmBOFH <vfmbofh@xxxxxxxxx <mailto:vfmbofh@xxxxxxxxx>> escribió: +1 a la sobredosis de conexiones. No hace ni 20 días que tuvimos un caso similar en fotofriki: La super aplicación web no cerraba conexiones y se encargó de tumbar un maquinón con un Oracle tuneado más que competentemente a base de conexiones sin cerrar. El 6 de mayo de 2014, 0:46, Wardog <wardogyelmundo@xxxxxxxxx <mailto:wardogyelmundo@xxxxxxxxx>>escribió: Voto por lo mismo. Si no cierras las conexiones a la base de datos aquello empieza a devorarse a sí mismo a poco que le des candela. Ojo también al ámbito de datareaders y qué se deja ahí metido. El 5 de mayo de 2014, 23:53, f5inet <f5inet@xxxxxxxxx <mailto:f5inet@xxxxxxxxx>>escribió: suena a que las conexiones a la BBDD no se cierran explicitamente en el webservice y se queda con mogollon de conexiones a la BBDD abiertas. hasta que no se reinicia el runtime o se fuerza un GC no se liberan 'implicitamente' las conexiones. de todas maneras, creo que una llamada a System.GC.Collect() deberia ser suficiente. te recomendaria hacer un LOG en cada webservice, que logueara el resultado de GC.GetTotalMemory(false), y ver si a partir de cierta memoria ocupada empieza a quedarse tonto el webservice. si es asi, con hacer que se ejecute el GC.Collect() si lo que devuelva GC.GetTotalMemory(false) es mas del 50% de cuando se queda tonto, deberia ser suficiente. tambien es posible que necesites llamar a GC. WaitForPendingFinalizers(), para asegurarte que los objetos 'tontos' son finalizados correctamente antes de seguir ejecutando codigo y metiendo mas basura al Heap. El 5 de mayo de 2014, 21:43, Carlos Melgarejo <zerocool.cmg@xxxxxxxxx <mailto:zerocool.cmg@xxxxxxxxx>>escribió: Buenas noches BOFHmanos, Tengo un problema con el GC de .NET y me gustaría saber si alguno lo ha tenido y como lo puedo solucionar. Expongo el pifostio: Tengo una aplicación, la cual saca chicha de una bbdd (irremediablemente) SQLServer. En un principio estaba App -> BBDD, todo funcionando a la perfección y la hostia de rápido. Llego el momento en el que el cliente pidió un WebService, y debía ser en .NET C#. Aquí viene el problema, el WS, tras 3 o 4 días, se queda atontado y bloquea todo el sistema de datos, teniendo que reiniciar el site de IIS. En uno de los bloqueos, dijimos a los técnicos (por llamarlos de alguna manera) que no reiniciaran, y lanzamos un forzado de limpieza de GC, dando en la clave del bloqueo. Al limpiarse, volvió a la vida la criaturita. Entonces, sabéis de alguna forma de que no pase esto con el Recolector? La última opción es poner un forzado de limpieza cada noche, o incluso (mucho mas hardcore) un forzado de limpieza, al final de cada petición. Muchas gracias por las respuestas que podáis dar. Un saludo y a cuidarse.