es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Depurar una fuga de memoria no administrada de dotnet con LLDB en Linux.

Tengo una aplicación cuyo consumo de memoria aumenta lentamente pero de manera continua. Un panel que construí con contadores de eventos y Grafana muestra que el tamaño del heap, el tamaño de gen[0-1-2], el tamaño de loh, el tamaño de poh, el recuento de ensamblados y los bytes jitted son constantes, pero el conjunto de trabajo sigue creciendo. Llega a 5Gb en una semana, a pesar de que el heap de la aplicación solo usa 2Gb.

He verificado con el comando free y solo había ~700Mb en buffer.

Sé cómo usar dotnet-dump y lldb para depurar una fuga de memoria administrada, pero no sé cómo depurar una fuga de memoria no administrada. Toda la información que encuentro es sobre WinDbg y el comando heap, el cual no tengo en lldb. ¿Cómo debo proceder?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Linux, .net-core, memoria, fugas de memoria y lldb, es importante seguir ciertos pasos para depurar una fuga de memoria no administrada. Aquí hay algunas recomendaciones:

    1. Identificar el tipo de fuga:
      El primer paso es identificar el tipo de fuga. Es muy probable que la fuga sea una fuga de memoria no administrada, ya que el tamaño del montón administrado es constante.
    2. Usar el comando lsof:
      El siguiente paso es usar el comando lsof para descubrir qué archivos están abiertos y qué procesos los están utilizando. Esto puede ayudar a reducir la causa potencial de la fuga.

    3. Verificar la memoria del sistema:
      También es importante verificar el uso de memoria del sistema para asegurarse de que la fuga no se debe a que el sistema pagine otros procesos debido a la falta de memoria.

    4. Usar Valgrind:
      Valgrind es una herramienta que puede ayudar a identificar fugas de memoria en programas C/C++. Se puede utilizar para detectar problemas como uso después de liberado, referencias nulas y más.

    5. Analizar con lldb:
      Si la fuga aún no se ha identificado, entonces se puede usar lldb para analizar el volcado de memoria principal. Usar el comando memory regions en lldb para obtener la lista de regiones del proceso. Esto puede ayudar a identificar la región con el uso creciente de memoria.

    6. Analizar con strace:
      strace también se puede utilizar para monitorear las llamadas al sistema realizadas por un proceso. Esto puede ayudar a identificar descriptores de archivos que no se cierran u otras llamadas al sistema que podrían indicar la fuente de la fuga.

    7. Usar el comando nm:
      El comando nm puede ayudar a identificar las funciones en el binario y sus direcciones. Esto puede ayudar a identificar posibles fugas de memoria causadas por funciones que asignan memoria pero nunca la liberan.

    En resumen, es esencial recopilar la mayor cantidad de información posible sobre la aplicación y monitorear los recursos del sistema para identificar la fuente de la fuga. Aunque lldb no tiene un comando heap, otras herramientas pueden ayudar a identificar y depurar fugas de memoria no administrada.

Comments are closed.