GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso misurare l'effettivo utilizzo della memoria di un'applicazione o di un processo?

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>

Linux
  1. Come rilasciare le pagine enormi dall'applicazione bloccata

  2. Come puoi vedere l'effettivo hard link di ls?

  3. Come posso impostare l'affinità del processore di un processo su Linux?

  4. Come posso nascondere l'output di un'applicazione shell in Linux?

  5. Come viene riportato l'utilizzo della memoria in Linux?

Come controllare l'utilizzo della memoria del processo con il comando pmap di Linux

Come calcolare l'utilizzo della CPU di un processo tramite PID in Linux da C?

Come profilare l'utilizzo della memoria?

Come posso conoscere il percorso assoluto di un processo in esecuzione?

Come posso visualizzare l'utilizzo della memoria di ciascun processo se eseguo un 'ps -ef'?

Se conosco il numero PID di un processo, come posso ottenere il suo nome?