GNU/Linux >> Tutoriales Linux >  >> Linux

Depuración ligera de fugas de memoria en Linux

Me gustaría anunciar mi recién anunciada utilidad heaptrack, que debería ser justo lo que estaba buscando en ese momento. Puede encontrar más información aquí:http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux

En comparación con su herramienta heapwatch, el rendimiento debería ser mucho mejor, ya que utilizo libunwind y luego libbacktrace para retrasar la anotación del backtrace con información de depuración DWARF.

Me encantaría recibir más comentarios al respecto, ¡así que pruébalo!


memleax debería funcionar para usted.

Depura la fuga de memoria de un proceso en ejecución al adjuntarlo, sin volver a compilar el programa ni reiniciar el proceso de destino. Es muy conveniente y adecuado para el entorno de producción.

Trampa solo para llamadas malloc/free(), por lo que debería tener un impacto menor en el rendimiento que Vagrild.

Funciona en GNU/Linux-x86_64 y FreeBSD-amd64.

NOTA:Soy el autor, cualquier sugerencia es bienvenida


GNU libc tiene una función de depuración malloc:

http://www.gnu.org/software/libc/manual/html_node/Allocation-Debugging.html

Usa LD_PRELOAD para llamar a mtrace() de su propio .so:

#include <mcheck.h>
static void prepare(void) __attribute__((constructor));
static void prepare(void)
{
    mtrace();
}

Compílelo con:

gcc -shared -fPIC dbg.c -o dbg.so

Ejecútelo con:

export MALLOC_TRACE=out.txt
LD_PRELOAD=./dbg.so ./my-leaky-program

Luego inspeccione el archivo de salida:

mtrace ./my-leaky-program out.txt

Y obtendrás algo como:

Memory not freed:
-----------------
           Address     Size     Caller
0x0000000001bda460     0x96  at /tmp/test/src/test.c:7

Por supuesto, siéntete libre de escribir tus propios ganchos malloc que descarguen toda la pila (llamando a backtrace() si crees que eso va a ayudar).

Los números de línea y/o los nombres de las funciones se podrán obtener si mantuvo la información de depuración para el binario en algún lugar (por ejemplo, el binario tiene información de depuración integrada, o si hizo objcopy --only-keep-debug my-leaky-program my-leaky-program.debug ).

Además, puede probar el GC de Boehm, también funciona como detector de fugas:

http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html


Linux
  1. ¿Linux puede limpiar la memoria?

  2. ¿Alternativa ligera X11 disponible?

  3. Depuración del kernel de Linux con QEMU

  4. Memoria inactiva de Linux

  5. Volcar la memoria de un proceso de Linux en un archivo

Pekwm:un escritorio ligero de Linux

Cómo borrar la memoria de intercambio en Linux

5 entornos de escritorio ligeros de Linux

Ejemplos de comandos gratuitos en Linux

¿Debo elegir un servidor Linux o Windows?

Segmentación de memoria de Linux