Come amministratore di sistema, o semplice utente che utilizza Linux sul suo computer a volte si nota che qualcosa sta mangiando tutta la memoria del nostro sistema.
Come prima cosa assicuratevi di capire come Linux gestisce la memoria, sono stato chiamato troppe volte da utenti spaventato che davano un free
e non erano in grado di leggere in modo corretto il suo output, in breve, non preoccupatevi se il kernel di Linux sta utilizzando la memoria per memorizzare dei file nella cache.
< modalità sfogo >
Per i miei “amati” utenti :
State tranquilli che gli sviluppatori del kernel possono fare un lavoro migliore di voi (e di me) nel trovare un buon algoritmo per memorizzare nella cache i file e liberare quelle aree di memoria quando un processo ne ha bisogno, quindi per favore non chiedetemi di mettere in cron qualche programma che sostanzialmente fà :
echo 3 > /proc/sys/vm/drop_caches |
Dopo questo avrete più memoria libera disponibile nel sistema, è vero, ma al sistema sarà necessario ri-leggere tutti i file dal disc , quindi in termini di prestazioni questa è di solito una cattiva mossa .
< /sfogo >
Ma ora diamo un’occhiata a un piccolo programma che ci può aiutare a trovare quale processo/utenti utilizzano, per davvero, la memoria dei nostri sistemi .
smem è uno strumento che può dare numerosi report sull’utilizzo della memoria sui sistemi Linux. A differenza degli strumenti esistenti, smem può segnalare proportional set size ( PSS ), che è una rappresentazione più significativa della quantità di memoria utilizzata dalle librerie e applicazioni in un sistema con memoria virtuale .
Poichè grandi porzioni di memoria fisica sono in genere condivise tra più applicazioni, la misura standard di utilizzo della memoria nota come resident set size ( RSS ) sarà sovrastimata notevolmente nel suo utilizzo. Il parametro PSS invece misura per ogni applicazione la “quota equa ” di ogni area condivisa per dare una misura realistica .
smem ha molte caratteristiche :
- Panoramica del sistema
- elenchi da parte di processo, mappatura, l’utente
- filtraggio per processo, mappatura, o utente
- colonne configurabili da più origini di dati
- output configurabili come unità e/o percentuali
- intestazioni configurabili e totali
- lettura di dati in tempo reale da /proc
- lettura di snapshots dei dati da directory in mirror o archivi compressi
- strumento di cattura dei dati leggero per sistemi embedded
- incorpora tutto quello che serve per la generazione di un grafico
Installazione
Se si utilizza Debian, Ubuntu o Mint è possibile installare smem direttamente dal repository ufficiale con il comando:
$ sudo apt-get install smem |
Gli utenti di Arch Linux possono installare il pacchetto dal repository AUR .
Gli utenti Red Hat / Fedora / CentOS / SuSE possono utilizzare il binario precompilato che è possibile scaricare direttamente dal sito ufficiale, per comodità è possibile copiare e incollare questi comandi che metteranno il comando smem
nella vostra directory /usr/local/bin :
cd /tmp/ wget http://www.selenic.com/smem/download/smem-1.3.tar.gz tar xvf smem-1.3.tar.gz sudo cp /tmp/smem-1.3/smem /usr/local/bin/ sudo chmod +x /usr/local/bin/smem |
Uso base
smem segnala l’utilizzo della memoria fisica, prendendo in considerazione le pagine di memoria condivisa. La memoria non condivisa viene segnalato come USS (Unique Set Size). La memoria condivisa è diviso equamente tra i processi che condividono la memoria. La memoria non condivisa (USS) più parte di un processo di memoria condivisa viene segnalato come PSS (Proportional Set Size). La USS e la PSS includono solo l’utilizzo della memoria fisica. Non comprendono la memoria che è in stato di swapping su disco.
L’uso di base visualizza i processi in esecuzione con la quantità di memoria utilizzata, per vederli eseguire il comando smem senza nessuna opzione, questo stampa un output simile a questo:
# smem PID User Command Swap USS PSS RSS .... 4223 linuxaria /usr/lib/chromium-browser/c 0 9144 11696 29132 14280 root python ./smem 0 11580 11839 13680 2180 linuxaria /usr/bin/python /usr/share/ 0 12956 14691 24392 2144 linuxaria python /usr/lib/linuxmint/m 0 20252 22337 35648 2121 linuxaria Thunar --daemon 0 13316 23122 44404 2123 linuxaria xfdesktop 0 24004 24924 36032 13095 linuxaria /usr/lib/chromium-browser/c 0 27536 30996 53328 2577 linuxaria /usr/bin/python /usr/lib/ub 0 34192 35112 41300 2127 linuxaria /home/riccio/copy/x86_64/Co 0 40268 41081 52248 10720 linuxaria /usr/lib/chromium-browser/c 0 38684 42107 63928 10561 linuxaria /usr/lib/chromium-browser/c 0 43956 48137 71644 10579 linuxaria /usr/lib/chromium-browser/c 0 46276 50290 73484 5605 linuxaria transmission-gtk /tmp/[kick 0 48616 51508 65148 8938 linuxaria /usr/lib/firefox/plugin-con 0 48960 55428 71132 2186 linuxaria /home/linuxaria/.dropbox-dist/ 0 55524 56061 64820 1722 root /usr/bin/X :0 -audit 0 -aut 0 52360 73110 96008 10623 linuxaria /usr/lib/chromium-browser/c 0 114224 121888 149236 4171 linuxaria chromium-browser --disable- 0 131044 140415 165780 7050 linuxaria /usr/lib/thunderbird/thunde 0 253428 256803 273152 2644 linuxaria /usr/lib/firefox/firefox 0 528420 537423 558992 |
Quindi in questo esempio (il mio desktop) il processo che sta mangiando più RAM è Firefox e al secondo posto Thunderbird.
Una opzione utile è la -u che mostra la somma di memoria utilizzata per ogni utente:
#smem -u User Count Swap USS PSS RSS daemon 1 0 196 197 368 rtkit 1 0 300 312 1396 nobody 1 0 428 442 1600 mdm 2 0 600 695 1808 avahi 2 0 568 806 2420 syslog 1 0 1032 1043 1884 messagebus 1 0 1124 1207 2048 root 40 0 96568 123002 203372 linuxaria 83 0 1539864 1640378 2222556 |
E’ possibile aggiungere un -p con questo comando (ed anche per tutti gli altri) per mostrare valori percentuali:
#smem -u -p User Count Swap USS PSS RSS daemon 1 0.00% 0.00% 0.00% 0.00% rtkit 1 0.00% 0.00% 0.00% 0.02% nobody 1 0.00% 0.01% 0.01% 0.02% mdm 2 0.00% 0.01% 0.01% 0.02% avahi 2 0.00% 0.01% 0.01% 0.03% syslog 1 0.00% 0.01% 0.01% 0.02% messagebus 1 0.00% 0.01% 0.01% 0.03% root 40 0.00% 1.18% 1.47% 2.41% linuxaria 83 0.00% 19.29% 20.48% 27.58% |
O se preferite un ampio panorama sull’utilizzo della memoria nel sistema, è possibile utilizzare -w
#smem -w -p Area Used Cache Noncache firmware/hardware 0.00% 0.00% 0.00% kernel image 0.00% 0.00% 0.00% kernel dynamic memory 64.55% 62.42% 2.13% userspace memory 22.12% 3.00% 19.12% free memory 13.33% 13.33% 0.00% |
Con l’opzione -w suggerisco di usare anche l’opzione -R MEMORIA, questo valore è la quantità di RAM fisica. Ciò consente a smem rilevare la quantità di memoria utilizzata dal firmware/hardware nell’output con -w. Se inserito, sarà utilizzato anche come dimensione totale della memoria per basarci le percentuali.
#smem -R 8G -w -p Area Used Cache Noncache firmware/hardware 2.83% 0.00% 2.83% kernel image 0.00% 0.00% 0.00% kernel dynamic memory 63.02% 60.95% 2.07% userspace memory 21.60% 2.91% 18.68% free memory 12.56% 12.56% 0.00% |
Creare dei grafici della memoria di linux con smem
Con smem (e avendo la libreria matplotlib) è possibile generare grafici a barre ed a torta con solo qualche opzione in più.
Mostra un grafico a barre con le colonne “pss ed uss”:
smem --bar pid -c "pss uss" |
Crea un grafico a torta dei processi che iniziano con ‘k’ su un sistema in esecuzione:
#smem -P '^k' --pie=name |
Conclusioni
Smem è uno strumento facile da usare che può dare con facilità alcune informazioni utili per la ricerca di processi che stanno occupando la memoria, è anche semplice ottenere un grafico, in questo modo sarete in grado di parlare con gli utenti e convincerli che dopo tutto il loro processo non è così piccolo e ben fatto, per quello che riguarda la memoria.
Popular Posts:
- None Found
A dure il vero in Arch Linux il programma è nel repository “community”; per installarlo basta quindi un semplice “pacman -S smem”
Ciao
Grazie mille Alberto, su Arch sono ancora molto niubbo 🙂
A quick sudo yum search smem shows that it is in the repos for Fedora 19.
================================================ N/S matched: smem ================================================
smem.noarch : Report application memory usage in a meaningful way
Cheers!
Thanks for the feedback, I don’t have a fedora to test the repository.
Be aware of a name conflict. There is a utility that is part of secure-delete which may cause a problem if you have it installed. That utility was formerly known as ‘sdmem’ but was renamed to ‘smem’. The manpage explains the name change this way: “This utility was originally called sdmem but was renamed for debian to avoid name clashes with another package.”
This is a delight!
Well more to learn I guess…. thanks a lot