2011-01-14 13 views
20

Sono a conoscenza di Valgrind, ma rileva solo problemi di gestione della memoria. Quello che sto cercando è uno strumento che mi fornisce una panoramica, quali parti del mio programma consumano quanta memoria. Una rappresentazione grafica con ad es. una mappa ad albero (come fa KCachegrind per Callgrind) sarebbe interessante.Come profilo l'utilizzo della memoria?

Sto lavorando su una macchina Linux, quindi gli strumenti di Windows non mi aiuteranno molto.

risposta

20

Utilizzare massif, che fa parte degli strumenti Valgrind. massif-visualizer può aiutarti a rappresentare graficamente i dati oppure puoi semplicemente utilizzare il comando ms_print.

+0

Grazie, gli screenshot sono molto belli ..., penso che sia quello che ho sempre desiderato. – math

4

Provate il heap profiler fornito con gperftools, da Google. L'ho sempre creato da fonti, ma è disponibile come precompiled package in diverse distribuzioni Linux.

È semplice da utilizzare come il collegamento di una libreria dinamica ai file eseguibili e l'esecuzione del programma. Raccoglie informazioni su ogni allocazione dinamica della memoria (per quanto ho visto) e salvare su disco un dump di memoria ogni volta che una delle seguenti circostanze:

  • HEAP_PROFILE_ALLOCATION_INTERVAL byte sono stati assegnati dal programma (di default : 1Gb)
  • high-acqua utilizzo della memoria marchio aumenta di HEAP_PROFILE_INUSE_INTERVAL byte (default: 100Mb)
  • HEAP_PROFILE_TIME_INTERVAL secondi sono trascorsi (impostazione predefinita: inattivo)
  • È esplicitamente chiama HeapProfilerDump() dal codice

L'ultimo, nella mia esperienza, è la più utile perché è possibile controllare esattamente quando per avere una fotografia di utilizzo mucchio e quindi confrontare due istantanee diverse e vedere cosa c'è che non va.

Alla fine, ci sono diversi formati di output possibili, come testuali o grafiche (sotto forma di un grafo orientato):

Graph of memory usage

utilizzo di questo strumento sono stato in grado di individuare gli usi della memoria non corrette che Non ho potuto trovare usando Massif.

Problemi correlati