Con ps
o strumenti simili otterrai solo la quantità di pagine di memoria allocate da quel processo. Questo numero è corretto, ma:
-
non riflette la quantità effettiva di memoria utilizzata dall'applicazione, ma solo la quantità di memoria ad essa riservata
-
può essere fuorviante se le pagine sono condivise, ad esempio da più thread o utilizzando librerie collegate dinamicamente
Se vuoi davvero sapere quale quantità di memoria utilizza effettivamente la tua applicazione, devi eseguirla all'interno di un profiler. Ad esempio, Valgrind può darti informazioni sulla quantità di memoria utilizzata e, cosa più importante, su possibili perdite di memoria nel tuo programma. Lo strumento heap profiler di Valgrind si chiama 'massif':
Massif è un profiler di heap. Esegue profili heap dettagliati eseguendo istantanee regolari dell'heap di un programma. Produce un grafico che mostra l'utilizzo dell'heap nel tempo, comprese le informazioni su quali parti del programma sono responsabili della maggior parte delle allocazioni di memoria. Il grafico è integrato da un file di testo o HTML che include ulteriori informazioni per determinare dove viene allocata la maggior parte della memoria. Massif esegue i programmi circa 20 volte più lentamente del normale.
Come spiegato nella documentazione di Valgrind, è necessario eseguire il programma tramite Valgrind:
valgrind --tool=massif <executable> <arguments>
Massif scrive un dump delle istantanee sull'utilizzo della memoria (ad es. massif.out.12345
). Questi forniscono, (1) una sequenza temporale dell'utilizzo della memoria, (2) per ogni istantanea, un record di dove è stata allocata la memoria del programma. Un ottimo strumento grafico per analizzare questi file è massif-visualizer. Ma ho trovato ms_print
, un semplice strumento basato su testo fornito con Valgrind, per essere già di grande aiuto.
Per trovare perdite di memoria, usa il (predefinito) memcheck
strumento di valgrind.
Prova il comando pmap:
sudo pmap -x <process pid>