Una fuga de memoria o en inglés memory leak es un error de software que ocurre cuando un bloque de memoria reservada no es liberada en un programa de computación.
Comúnmente ocurre porque se pierden todas las referencias a esa área de memoria antes de haberse liberado.
Dependiendo de la cantidad de memoria perdida y el tiempo que el programa siga en ejecución, este problema puede llevar al agotamiento de la memoria disponible en la computadora.
Este problema se da principalmente en aquellos lenguajes de programación en los que el manejo de memoria es manual (C o C++ principalmente), y por lo tanto es el programador el que debe saber en qué momento exacto puede liberar la memoria.
Otros lenguajes utilizan un recolector de basura o conteo de referencias que automáticamente efectúa esta liberación.
Sin embargo todavía es posible la existencia de fugas en estos lenguajes si el programa acumula referencias a objetos, impidiendo así que el recolector llegue a considerarlos en desuso.
Como evitar la fuga de memoria o memory leak en asp:
- Cerrar los registros de base de datos
- Cerrar las conexiones de base de datos
- Cerrar todos los otros objetos que hayan creado
- En caso de utilizar en response.redirect hacer todo lo anterior antes de llamarlo.
Causas para producir una fuga de memoria en IIS w3wp.exe
Podría ser un millón de cosas: las conexiones de base de datos no se han cerrado, objetos ADO no está correctamente destruidos … a menos que sólo hay unos pocos sitios en el servidor que va a tener un montón de problemas rastrear cuál es el culpable.
Herramientas para encontrar una fuga de memoria en el IIS w3wp.exe
Utilizar un depurador del w3wp.exe cuando está al 100%, determine qué código se está ejecutando actualmente y masticar ciclos de CPU, y fijar ese código para no masticar CPU.
Debug Diagnostic Tool
Herramienta diseñada para ayudar en la solución de problemas tales como cuelges, bajo rendimiento, pérdida de memoria o de fragmentación, y se estrella en cualquier proceso de modo de usuario.
La herramienta incluye secuencias de comandos de depuración adicionales centradas en Internet Information Services (IIS), los datos de las aplicaciones web de componentes de acceso, COM + y relacionadas con tecnologías de Microsoft.
- Descargar Debug Diagnostic Tool x86 desde Microsoft
- Descargar Debug Diagnostic Tool x64 desde Microsoft
Debug Diagnostic Tool proporciona un modelo de objetos extensible en forma de objetos COM y proporciona todo tipo script con un marco de información integrado.
Se compone de los siguientes 3 componentes: un servicio de depuración, un host del depurador, y la interfaz de usuario.
El Servicio de Depuración El servicio del depurador (DbgSvc.exe) realiza las siguientes tareas:
- Conectar / Desconectar el anfitrión a los procesos
- Recoger datos de rendimiento del monitor
- Implementar mesa de ping HTTP para detectar cuelges
- Inyectar monitor de fugas en los procesos en ejecución
- Recopilar información de estado de sesión de depuración
- Muestra el estado de cada regla definida
El host del depurador (DbgHost.exe) acoge el motor de Windows Depurador simbólico (dbgeng.dll) para unir a los procesos y generar volcados de memoria.
También alberga el módulo analizador principal para analizar volcados de memoria. Dbghost.exe no tiene ninguna dependencia en el servicio «DbgSvc.exe» y puede ser utilizado por separado.
La interfaz de usuario de las interfaces de usuario (DebugDiag.exe y DebugDiagAnalysisOnly.exe) presentan una interfaz para analizar volcados de memoria, automatizar la creación de secuencias de comandos de control y para mostrar el estado de los procesos en ejecución, incluidos los servicios.
Se compone de tres puntos de vista:
- Reglas: Crea script de control para el host del depurador a través de un asistente. El script se encuentra en el directorio \ scripts.
- Análisis Avanzado: Se ejecuta un seleccionado «Script Análisis» en contra de uno o más volcados de memoria.
- Procesos: Muestra el estado de los procesos en ejecución / servicios.