GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Hai bisogno di una spiegazione sulla dimensione del set residente/dimensione virtuale?

Ho trovato che pidstat sarebbe un buon strumento per monitorare i processi. Voglio calcolare l'utilizzo medio della memoria di un particolare processo. Ecco alcuni esempi di output:

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(Questo fa parte dell'output di pidstat -r -p 7276 .)

Devo utilizzare le informazioni Resident Set Size (RSS) o Virtual Size (VSZ) per calcolare il consumo medio di memoria? Ho letto alcune cose su Wikipedia e sui forum ma non sono sicuro di capire appieno le differenze. Inoltre, sembra che nessuno di loro sia affidabile. Quindi, come posso monitorare un processo per ottenere il suo utilizzo di memoria?

Qualsiasi aiuto su questo argomento sarebbe utile.

Risposta accettata:

RSS è la quantità di memoria che questo processo ha attualmente nella memoria principale (RAM). VSZ è la quantità di memoria virtuale che il processo ha in totale. Ciò include tutti i tipi di memoria, sia nella RAM che in swap. Questi numeri possono essere distorti perché includono anche librerie condivise e altri tipi di memoria. Puoi avere cinquecento istanze di bash in esecuzione e la dimensione totale della loro impronta di memoria non sarà la somma dei loro valori RSS o VSZ.

Se hai bisogno di avere un'idea più dettagliata dell'impronta di memoria di un processo, hai alcune opzioni. Puoi passare da /proc/$PID/map ed elimina le cose che non ti piacciono. Se si tratta di librerie condivise, il calcolo potrebbe diventare complesso a seconda delle tue esigenze (che penso di ricordare).

Se ti interessa solo la dimensione dell'heap del processo, puoi sempre analizzare il [heap] voce nella map file. La dimensione che il kernel ha allocato per l'heap del processo può riflettere o meno il numero esatto di byte che il processo ha chiesto da assegnare. Ci sono dettagli minuziosi, interni del kernel e ottimizzazioni che possono sbarazzarsi di questo. In un mondo ideale, sarà quanto necessario al tuo processo, arrotondato per eccesso al multiplo più vicino della dimensione della pagina di sistema (getconf PAGESIZE ti dirà di cosa si tratta:sui PC, è probabilmente 4.096 byte).

Se vuoi vedere quanta memoria ha allocata un processo , uno dei modi migliori è rinunciare alle metriche lato kernel. Invece, si strumentano le funzioni di (de)allocazione della memoria heap della libreria C con il LD_PRELOAD meccanismo. Personalmente, abuso leggermente di valgrind per avere informazioni su questo genere di cose. (Si noti che l'applicazione della strumentazione richiederà il riavvio del processo.)

Correlati:Linux – Ho eliminato accidentalmente la cartella /root e ora la stringa della shell è diversa. Cosa dà?

Nota, poiché potresti anche eseguire il benchmarking dei runtime, che valgrind renderà i tuoi programmi leggermente più lenti (ma probabilmente entro le tue tolleranze).


Linux
  1. Picco di utilizzo della memoria di un processo Linux/Unix

  2. Utilizzo della memoria del processo corrente in C

  3. Come controllare la dimensione dell'heap per un processo su Linux

  4. Limita l'utilizzo della memoria per un singolo processo Linux

  5. Quando un processo esegue il fork, viene copiata la sua memoria virtuale o residente?

Swappiness in Linux:tutto ciò che devi sapere

Come estendere la dimensione del disco della macchina virtuale KVM in Linux

Trova la dimensione della RAM in Linux

Come viene riportato l'utilizzo della memoria in Linux?

Utilizzo della memoria del processo grafico su Linux

Scarica la memoria di un processo Linux su file