Semplice one-liner…
Gennaio 28, 2008 di jp
Devo dire che apprezzo tremendamente le utility UNIX: semplici (cfr. principio “KISS“), collegabili in cascata, …
Sfortunatamente capire quanta memoria fisica (RAM) viene usata da ciascun processo non è cosa esattamente agevole da linea di comando (intendo in un formato chiaro ed “human-readable“).
Così, gironzolando per la Rete mi sono imbattuto in questa pagina, molto interessante, contenente dei bei one-liners (ossia miniscript che stanno su una sola riga e che spesso si lanciano direttamente dalla shell).
Uno di questi scrippettini fa giusto al caso mio: “mostra i 10 processi che usano più memoria”.
Preciso che per “consumo di memoria fisica”, intendo la cosiddetta RSS.
Citando da questo post:
“RSS - This tells how much RAM resident memory is currently being used for the text and data segments for a particular process in units of
kilobytes. (this value will always be a multiple of 4 since memory is
allocated in 4 KB pages).”
Nota: Quegli scrippettini sono davvero belli, peccato siano pensati per AIX e, comunque, a me dei KB interessa poco: ormai ragiono (come minimo) in MB…
Così, ho optato per modificare opportunamente il sopra-citato script e ne ho reso un po’ più comprensibile l’output…
#VERSIONE PER LINUX
ps avx | grep -v PID | sort -rn -k 8 | head -n 10 | awk ‘{$8=$8/1024; print $8 ” MB\t” $10 }’
La versione per Mac è essenzialmente identica, a meno di una piccola correzione sul “campo RSS” da leggere.
#VERSIONE PER MACOSX
ps avx | grep -v PID | sort -rn -k 8 | head -n 10 | awk ‘{$8=$8/1024; print $8 ” MB\t” $13 }’
Per i più curiosi, qualche info sui comandi usati (messi opportunamente in pipe):
- tramite ps con le opzioni per mostrare tutti i processi (-a) e le informazioni sull’utilizzo della memoria (-v);
- tramite grep, prendiamo solo le linee che contengono info sui processi (con -v, evitiamo di prendere la prima riga, che contiene “PID”);
- tramite sort, ordiniamo i dati in ordine decrescente (-r), ordinamento di tipo “numerico”, (-n) in base ai valori della “colonna” 8 (-k 8), quella del “campo RSS”: in altre parole ordiniamo i processi in base alla RAM occupata, da quello che ne occupa di più, a quello che ne occupa di meno;
- tramite head recuperiamo solo le prime 10 linee (-n 10);
- tramite awk, recuperiamo il valore RSS di ciascun processo (colonna 8 ) e lo dividiamo per 1024 (per passare da KB a MB); infine stampiamo tale valore ed il nome del processo a cui si riferisce.
Attenzione (#1): su alcune distro Linux, bisogna giocare un po’ col comando ps per ottenere le giuste colonne e quindi l’output corretto (distro che vai, comandi che trovi
)
Attenzione (#2): se copiate il codice, controllate che gli apicetti/apostrofi (’) e le virgolette (”) siano “diritti” e non “obliqui”: non sono la stessa cosa e hanno significati diversi! (WordPress tende a cambiarli, presumo per ragioni di sicurezza)



