Encuentre y solucione fugas de memoria en Windows 11/10

Una fuga de memoria(Memory Leak) es una mala ubicación de recursos en un programa de computadora debido a una asignación de memoria defectuosa. Ocurre cuando una ubicación de RAM que no está en uso permanece sin publicar. Una fuga de memoria no debe confundirse con una fuga de espacio, que se refiere a un programa que usa más RAM de la necesaria. Se dice que se produjo una fuga de memoria en un Windows 11/10/8/7 cuando no se puede acceder a la memoria a pesar de no estar en uso.

Pérdidas de memoria en Windows 11/10

Antes de comenzar, debe saber que una fuga de memoria(Memory) es un problema de software para depurar, por ejemplo, en Java , JavaScript , C/C++, Windows , etc. No es necesario reemplazar físicamente la RAM o el disco duro.

Pérdida de memoria en Windows 10

Porque es malo

Es obvio que una fuga de memoria es mala porque es un error, una falla en el sistema. Pero veamos cómo afecta exactamente al sistema:

  1. Dado que la memoria no se libera incluso cuando no está en uso, se produce un agotamiento de la memoria.
  2. El agotamiento de la memoria da como resultado el envejecimiento del software.
  3. La reducción de la memoria disponible conduce a un mayor tiempo de respuesta y un rendimiento deficiente del sistema.
  4. Una fuga de memoria no controlada puede eventualmente provocar el bloqueo de una aplicación.

Para identificar una fuga de memoria, un programador necesita tener acceso al código fuente del programa.

Localizando la fuga

Para resolver un problema, primero debemos identificarlo. Los pasos básicos para localizar una pérdida de memoria son:

  1. Afirmación(Affirmation) : Determinar si se ha producido una fuga.
  2. Búsqueda de fugas de memoria en modo kernel(Finding Kernel-mode memory leak) : Localización de una fuga causada por un componente del controlador en modo kernel.
  3. Búsqueda de fugas de memoria en modo de usuario(Finding User-mode memory leak) : Localización de una fuga causada por un controlador o una aplicación en modo de usuario.

Asignación de memoria

Hay diferentes modos en los que las aplicaciones asignan RAM . Si no se libera espacio después del uso, se producirá una fuga de memoria independientemente del modo de asignación. Algunos patrones de asignación comunes son:

  1. Función HealAlloc(HealAlloc) para la asignación de memoria en montón. Los equivalentes en tiempo de ejecución de C/C++ son malloc y new.
  2. Función VirtualAlloc(VirtualAlloc) para la asignación directa desde el sistema operativo.
  3. API de Kernel32(Kernel32 APIs) para mantener la memoria del kernel para la aplicación. Ejemplo(Example) , CreateFile , CreateThread .
  4. API User32 y API Gdi32.

Evitar fugas de memoria en Windows

Todos sabemos que es mejor prevenir que curar, así que aquí hay algunas formas de prevenir una pérdida de memoria.

Monitoreo de hábitos

Pérdidas de memoria en Windows 10

Debe estar atento al uso anormal de RAM por parte de programas y aplicaciones individuales. Puede ir al Administrador de tareas de Windows(Windows Task Manager) presionando CTRL+SHIFT+ESC y agregar las columnas como Identificadores(Handles) , Objetos de usuario(User Objects) , Objetos GDI(GDI Objects) , etc.

Esto lo ayudará a monitorear fácilmente el uso de recursos.

Leer(Read) : ¿Cuáles son los tipos de memoria en una computadora?(What are the Types of Memory in a computer?)

(Microsoft)Herramientas de Microsoft para diagnosticar fugas de memoria

Varias herramientas diagnostican fugas de memoria para varios modos de asignación:

  1. Application Verifier diagnostica fugas de montón.
  2. UMDH (un componente de las herramientas de depuración de Windows(Windows Debugging Tools) ) diagnostica fugas de procesos individuales al monitorear las asignaciones de memoria en montón.
  3. Trace Capture para un análisis exhaustivo del uso de RAM .
  4. Xperf también realiza un seguimiento de los patrones de asignación de montones.
  5. CRT Debug Heap no solo realiza un seguimiento de las asignaciones de almacenamiento dinámico, sino que también permite prácticas de codificación para minimizar las fugas.
  6. JavaScript Memory Leak Detector depura las fugas de memoria en los códigos.

Consejos de uso

  1. Use kernel HANDLE s y otros punteros inteligentes para recursos de Win32 y asignaciones de almacenamiento dinámico.
  2. Obtenga(Get) clases para la administración automática de recursos para asignaciones de kernel de la biblioteca ATL . El estándar C++ tiene auto_ptr para asignaciones de almacenamiento dinámico.
  3. Encapsule(Encapsulate COM) los punteros de la interfaz COM dentro de los "punteros inteligentes" con la ayuda de _com_ptr_t o _bstr_t o _variant_t .
  4. Supervise(Monitor) el código .NET para detectar un uso anormal de la memoria.
  5. Evite(Avoid) múltiples rutas de salida para funciones para permitir que las asignaciones se liberen de variables en la mayoría de los bloques al final de una función.
  6. Use excepciones nativas solo después de liberar todas las asignaciones en el bloque _finally . Envuelva(Wrap) todas las asignaciones de almacenamiento dinámico y control en punteros inteligentes para usar las excepciones de C++.
  7. Llame siempre a la función PropVariantClear antes de reiniciar o descartar un objeto PROPVARIANT .

Solucionar problemas(Troubleshoot) de fugas de memoria en Windows

Al igual que las diversas formas de evitar fugas de memoria, existen varias formas de detener las fugas de memoria. Pero antes de comenzar, recuerde crear primero un punto de restauración del sistema .

1] Cerrar procesos y reiniciar.

Si ve que un proceso innecesario está ocupando demasiada RAM , puede finalizar el proceso en el Administrador de tareas(Task Manager) . Deberá reiniciar el dispositivo para que el espacio liberado esté disponible para que lo utilicen otros procesos. Sin un reinicio(Restart) , el problema de pérdida de memoria no se resolverá. Un proceso particular que tiene errores para ralentizar la PC es Runtime Broker . Pruebe si deshabilitar eso solo funciona.

2] Herramientas de diagnóstico de memoria

Diagnóstico de memoria de Windows

Para acceder a la herramienta de diagnóstico de memoria(Memory Diagnostic Tool) incorporada para Windows:

  1. Guarde todo su trabajo importante.
  2. Presione Win + R para abrir la ventana Ejecutar .(Run)
  3. Escriba el comando mdsched.exe en la ventana Ejecutar .(Run)
  4. Reinicie la PC.
  5. Después de reiniciar, realice un escaneo básico o vaya a las opciones ' Avanzadas(Advanced) ' como ' Test mix ' o ' Pass count '.
  6. Presione F10 para iniciar la prueba.

Estas son todavía soluciones temporales.

3] Buscar actualizaciones de controladores

Actualizar el software del controlador

Los controladores obsoletos provocan pérdidas de memoria. Mantenga todos los controladores actualizados :

  1. Presione Win + R y abra la ventana Ejecutar . (Run)Escriba devmgmt.msc y presione Entrar(Enter) . Te llevará al Administrador de dispositivos(Device Manager) .
  2. Compruebe(Check) si hay controladores obsoletos y actualícelos todos.
  3. Para las actualizaciones que quizás te hayas perdido, busca en Windows Update .

Esto fue sencillo.

4] Optimizar el rendimiento

Ajustarse para un mejor desempeño

Ajustar el rendimiento de Windows administrará todo, incluida la programación del procesador y el uso de la memoria para detener las fugas de memoria. Sigue estos pasos:

  1. Haga clic derecho en ' Esta PC(This PC) ' y seleccione la configuración ' Avanzada(Advanced) ' en el panel izquierdo.
  2. En la pestaña ' Avanzado(Advanced) ', vaya a ' Rendimiento(Performance) ', seguido de ' Configuración(Settings) '.
  3. Marque ' Ajustar para obtener el mejor rendimiento(Adjust for best performance) ' y haga clic en Aceptar(OK) .
  4. Reinicie(Restart) y verifique si el problema está resuelto.

Si esta solución simple no funcionó, pruebe la siguiente solución.

5] Deshabilitar programas(Programs) que se ejecutan en el inicio(Startup)

Programas de inicio

Deshabilitar los programas problemáticos es la única forma de deshacerse del problema de pérdida de memoria. Vaya al Administrador de tareas(Task Manager) y deshabilite el programa problemático. Si no sabe qué programas están creando el problema, haga lo siguiente:

  1. Vaya a ' Administrador de tareas(Task Manager) '.
  2. Vaya a ' Inicio(Startup) '.
  3. Deshabilite los programas de inicio(Disable the startup programs) que no necesita ejecutar de manera predeterminada.

6] Desfragmentar disco duro

Desfragmentación de disco

Aunque Windows 10 hace esto por usted automáticamente, es posible que deba desfragmentar los discos duros de vez en cuando para optimizar el rendimiento:

  1. Vaya a ' Esta PC(This PC) ' o ' Mi PC(My Computer) '.
  2. Haga clic con(Right-Click) el botón derecho en el disco duro del sistema (normalmente, la unidad C:).
  3. Vaya a ' Herramientas(Tools) ' en ' Propiedades(Properties) ' y seleccione ' Optimizar(Optimize) '.
  4. Seleccione la unidad a desfragmentar y seleccione ' Analizar(Analyze) '.

Reinicie su computadora después de la nueva fragmentación.

7] Archivo ClearPage al apagar

Se está volviendo complejo ahora, pero no se preocupe. Aquí se explica cómo borrar el archivo de página en cada apagado(clear the Page File at every shutdown) :

  • Escriba regedit en Buscar(Search) para iniciar el Editor del registro(Registry Editor) .
  • Introduzca esta ruta:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • Cambie el valor de ClearPageFileAtShutDown a '1'.( ClearPageFileAtShutDown to ‘1’.)
  • Guarde los cambios y reinicie(Restart) el dispositivo.

Esto debería hacerlo. Recuerde que su proceso de apagado llevará un poco más de tiempo.

9] Desactivar Superfetch

Este servicio de Windows(Windows Service) optimiza el rendimiento al minimizar el tiempo de arranque. Permite que Windows administre el uso de RAM . La vida(Life) después de deshabilitar Superfetch no es conveniente, pero hazlo si es necesario. Al menos intente esto solo para aislar el problema:

  1. Busque services.msc y vaya a Administrador de servicios.
  2. Busque ' Superfetch ' y haga clic derecho para ir a ' Propiedades(Properties) '.
  3. Seleccione ' Parar(Stop) '.
  4. También ' Deshabilitar(Disable) ' el servicio desde el menú desplegable.
  5. Reinicie la PC y verifique si el rendimiento ha mejorado.

Habilite Superfetch si este no funcionó.

10] Comprobar si hay malware

Use un software antivirus de terceros o el Windows Defender interno de Windows 10 para escanear y eliminar el malware. Asegúrese(Make) de que el antivirus esté actualizado para admitir su sistema operativo para que no termine convirtiéndose en el motivo de la pérdida de memoria.

Todas las soluciones que pueda necesitar para encontrar o prevenir fugas de memoria están aquí. Puede leer más sobre pérdidas de memoria en MSDN y Microsoft .



About the author

Soy un experto experimentado en Windows 10 y 11/10, con experiencia tanto en navegadores como en aplicaciones para teléfonos inteligentes. He sido ingeniero de software durante más de 15 años y he trabajado con varias empresas de renombre, incluidas Microsoft, Google, Apple, Ubisoft y más. También he enseñado desarrollo de Windows 10/11 a nivel universitario.



Related posts