GNU/Linux >> Linux Esercitazione >  >> Linux

Debug leggero della perdita di memoria su Linux

Vorrei pubblicizzare la mia utility heaptrack appena annunciata, che dovrebbe essere proprio quello che stavi cercando allora. Puoi trovare maggiori informazioni qui:http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux

Rispetto al tuo strumento heapwatch, le prestazioni dovrebbero essere di gran lunga migliori, poiché utilizzo libunwind e successivamente libbacktrace per ritardare l'annotazione del backtrace con le informazioni di debug di DWARF.

Mi piacerebbe ricevere più feedback in merito, quindi provalo!


memleax dovrebbe funzionare per te.

Esegue il debug della perdita di memoria di un processo in esecuzione allegandolo, senza ricompilare il programma o riavviare il processo di destinazione. È molto comodo e adatto all'ambiente di produzione.

Esegue il TRAP solo per le chiamate malloc/free(), quindi dovrebbe avere un impatto sulle prestazioni inferiore rispetto a Vagrild.

Funziona su GNU/Linux-x86_64 e FreeBSD-amd64.

NOTA:sono l'autore, ogni suggerimento è ben accetto


GNU libc ha il debug malloc integrato:

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

Usa LD_PRELOAD per chiamare mtrace() dal tuo .so:

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

Compilalo con:

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

Eseguilo con:

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

Successivamente ispeziona il file di output:

mtrace ./my-leaky-program out.txt

E otterrai qualcosa come:

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

Ovviamente, sentiti libero di scrivere i tuoi hook malloc che scaricano l'intero stack (chiamando backtrace() se pensi che possa essere d'aiuto).

I numeri di riga e/o i nomi delle funzioni saranno ottenibili se hai mantenuto le informazioni di debug per il binario da qualche parte (ad es. il binario ha alcune informazioni di debug integrate o hai fatto objcopy --only-keep-debug my-leaky-program my-leaky-program.debug ).

Inoltre, potresti provare il GC di Boehm, funziona anche come rilevatore di perdite:

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


Linux
  1. Utilizzo della memoria di Linux

  2. Come cancellare la cache di memoria in Linux

  3. Versione Kali Linux 2018.1

  4. L'allocazione della memoria in Linux non è bloccante?

  5. Memoria inattiva di Linux

Pekwm:un desktop Linux leggero

Come cancellare la memoria di scambio in Linux

5 Ambienti desktop Linux leggeri

Esempi di comandi gratuiti in Linux

Dovrei scegliere Linux Server o Windows?

Segmentazione della memoria di Linux