Comprendi facilmente l'utilizzo della RAM di Linux con Smem
Pubblicato: 2022-01-29 L'utilizzo della memoria di Linux può essere difficile da interpretare e da capire. Con smem
è facile scoprire quale memoria sta utilizzando un processo e quali processi stanno utilizzando di più.
Utilizzo della memoria
Linux ti offre molti modi per controllare cosa sta succedendo con la RAM del tuo computer. Il problema è che la gestione della memoria è una sfida complicata per il tuo sistema operativo. Deve destreggiarsi tra RAM fisica, RAM virtuale sotto forma di spazio di scambio e le richieste dei diversi tipi di processi in esecuzione in qualsiasi momento.
I processi consumano RAM mentre si caricano in memoria. Quindi richiedono più RAM in modo da avere spazio per eseguire qualsiasi attività per cui sono progettati. Alcuni processi hanno un impatto minimo sulla RAM, altri sono molto affamati di memoria.
Il kernel e il resto del sistema operativo, il tuo ambiente desktop e ogni applicazione o sessione della riga di comando che esegui chiedono a gran voce una parte della quantità finita di RAM installata nel tuo computer. Alcuni processi generano altri processi. Alcuni processi condividono la RAM con altri processi.
Cercando di decifrare tutto questo e di trovare una risposta semplice alla domanda "Quanta RAM sta utilizzando questo programma o processo?" può essere una sfida sorprendente. La granularità è ottima e ha il suo posto ma, allo stesso modo, l'eccesso di informazioni può essere un impedimento.
Ad esempio, l'utilizzo di cat
per sbirciare nello pseudo filesystem /proc/meminfo ha restituito 50 righe di output sulla macchina utilizzata per la ricerca di questo articolo. Da dove inizi?
gatto /proc/meminfo
E alcune utility Linux danno risposte diverse. Sulla nostra macchina di prova, avevamo un'istanza di less
esecuzione, che aveva un ID processo di 2183.
Possiamo usare l'utilità pmap
con l'opzione -x
(estesa) per avere un quadro completo dell'utilizzo della memoria di un processo. Lo useremo con l'ID processo della nostra istanza di less
:
pmap -x 2183
Nella parte inferiore dell'output, otteniamo un totale per Resident Set Size, che è la quantità di RAM principale utilizzata.
Abbiamo quindi utilizzato l'utilità ps
con l'opzione -o
(output), selezionato la colonna RSS
e passato l'ID di processo della stessa istanza di less
:
ps -o rss 2183
Otteniamo un risultato diverso. Questa è una decisione progettuale da parte degli autori di ps
. Questo è dalla pagina man
di ps
:
Gli autori di altre utilità hanno le proprie opinioni su come misurare l'utilizzo della RAM.
L'RSS, l'USS e il PSS
La Resident Set Size (RSS) è la quantità di RAM allocata a un processo, escluso lo spazio di scambio, ma inclusa la RAM richiesta dalle librerie condivise utilizzate dal processo.
RSS quasi sempre sovrastima l'utilizzo della RAM. Se due o più processi utilizzano una o più librerie condivise, RSS aggiungerà semplicemente l'utilizzo della RAM di ciascuna libreria al conteggio dell'utilizzo della RAM per ciascuno di questi processi. Oltre all'inesattezza, c'è una certa ironia in questo. Le librerie condivise significano che ogni processo non ha bisogno di caricare la propria istanza privata di una libreria. Se la libreria è già in memoria, la condividerà e ridurrà il sovraccarico della RAM.
Il Proportional Set Size cerca di risolvere questo problema dividendo la quantità di memoria condivisa tra i processi che la condividono. Se sono presenti quattro processi che condividono una parte della memoria, PSS segnala che il 25% della RAM condivisa viene utilizzato da ciascuno di questi processi. Questa è un'approssimazione, ma ricorda più da vicino ciò che sta accadendo rispetto all'immagine che RSS dipinge.
La dimensione del set univoco è la quantità di RAM che viene utilizzata esclusivamente da un processo, indipendentemente dal fatto che venga consumata direttamente dal processo o utilizzata dalle librerie utilizzate esclusivamente dal processo. Ancora una volta, ignora lo spazio di scambio. È interessato solo alla RAM fisica genuina.
USS e PSS sono termini e concetti che sono stati proposti da Matt Mackall, l'autore di smem
.
La piccola utilità
L'utilità smem
segnala la memoria utilizzata da processi, utenti, mappatura oa livello di sistema. Su tutte le distribuzioni che abbiamo testato, richiedeva l'installazione. Per installarlo su Ubuntu, usa questo comando:
sudo apt install smem
Per installare smem
su Fedora devi digitare:
sudo dnf install smem
Per installare smem
su Manjaro usa:
sudo pacman -Sy smem
L'utilizzo di smem
senza opzioni fornisce un elenco dei processi che utilizzano la RAM.
sme
Nella finestra del terminale viene visualizzata una tabella di informazioni.
Le colonne sono:
- PID : l'ID del processo che sta utilizzando la memoria.
- Utente : il nome utente dell'utente proprietario del processo.
- Comando : la riga di comando che ha avviato il processo.
- Scambia : quanto spazio di scambio sta utilizzando il processo.
- USS : la dimensione unica del set.
- PSS : la dimensione del set proporzionale.
- RSS : La dimensione del set residente.
Per visualizzare le dimensioni espresse come percentuali, utilizzare l'opzione -p
(percentuale).
smem -p
Le dimensioni in byte sono state sostituite con le percentuali.
Per vedere le figure rese in una forma più umana, usa l'opzione -k
(abbreviazione). Ciò riduce le cifre e aggiunge indicatori di unità.
smem -k
Invece di byte grezzi, le dimensioni vengono visualizzate in megabyte, gigabyte e così via.
Per aggiungere una riga di totali, utilizzare l'opzione -t
(totali).
smem -k -t
L'ultima riga dell'output mostra i totali per ciascuna colonna.
Perfezionamento del rapporto
Puoi chiedere a smem
di segnalare l'utilizzo della memoria da parte degli utenti, la mappatura (librerie) o l'intero sistema. Per filtrare l'output in base all'utente, utilizzare l'opzione -u
(utente). Nota che se vuoi vedere qualcosa di più del tuo utilizzo, dovrai eseguire smem
con sudo
.
smem -u
sudo smem -u
Come puoi vedere, l'output viene deformato per i nomi utente più lunghi di otto caratteri.
Per visualizzare l'utilizzo mappato alle librerie in uso, indipendentemente da quali processi stanno utilizzando le librerie, né da quali utenti possiedono tali processi, utilizzare l'opzione -m
(mappatura).
smem -m -k -t
Abbiamo anche chiesto valori leggibili dall'uomo e un totale.
Per visualizzare l'utilizzo della memoria a livello di sistema, utilizzare l' -w
(a livello di sistema).
smem -w -k -t
Reporting su un unico programma
Con un po' di magia da riga di comando, possiamo creare report su un singolo programma e tutti i suoi sottoprocessi. Invieremo l'output da smem
a tail
e chiederemo a tail
di mostrare solo l'ultima riga. smem
alle PMI di utilizzare valori leggibili dall'uomo e di fornire un totale. Il totale sarà l'ultima riga, e questa è la tail
della riga che verrà visualizzata per noi.
Useremo l'opzione -c
(colonne) con smem
e gli diremo quali colonne vogliamo includere nel nostro output. Lo limiteremo alla colonna Proportional Set Size. L'opzione -P
(filtro di processo) ci consente di fornire una stringa di ricerca a smem
. Verranno incluse solo le righe di output corrispondenti.
smem -c pss -P firefox -k -t | coda -n 1
Questo è un modo rapido e accurato per scoprire il consumo di RAM di un programma e dei suoi processi figlio.
Generazione di grafici
Puoi passare le opzioni --pie
o --bar
per fare in modo che smem
generi grafici. Va detto che con troppe categorie i grafici diventano rapidamente incomprensibili, ma possono essere utili per una rapida panoramica visiva.
Il formato del comando è:
smem --pie name -s uss
Il grafico a torta viene visualizzato nella propria finestra di visualizzazione.
Per vedere altri grafici, usa pss
o rss
invece di uss
. Per vedere un grafico a barre, usa --bar
invece di --pie
.
Affinché funzioni, dovrai avere installato Python, insieme alla libreria matplotlib
. Questi erano già installati sulle distribuzioni Ubuntu, Fedora e Manjaro che abbiamo testato.
Le cose buone arrivano in piccoli pacchetti
L'utilità smem
ha qualche asso nella manica e sei incoraggiato a dare un'occhiata alla sua pagina man
. Il suo repertorio principale è quello che abbiamo delineato qui ed è un piccolo grande strumento da avere nella tua cassetta degli attrezzi della CLI.
CORRELATI: 37 importanti comandi Linux che dovresti conoscere