Comprendi facilmente l'utilizzo della RAM di Linux con Smem

Pubblicato: 2022-01-29
Schermo del laptop che mostra il logo della shell Bash su uno sfondo rosso
fatmawati achmad zaenuri/Shutterstock

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.

Di quanta RAM ha bisogno il tuo computer per i giochi per PC?
CORRELATI Di quanta RAM ha bisogno il tuo computer per i giochi per PC?

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.

Come controllare l'utilizzo della memoria dal terminale Linux
CORRELATI Come controllare l'utilizzo della memoria dal terminale Linux

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.

Annuncio pubblicitario

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 

Interrogazione della mappa di memoria di un singolo processo

Nella parte inferiore dell'output, otteniamo un totale per Resident Set Size, che è la quantità di RAM principale utilizzata.

L'output di pmap per una singola istanza di less

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 

Utilizzo di ps per vedere l'RSS della stessa istanza di less

Otteniamo un risultato diverso. Questa è una decisione progettuale da parte degli autori di ps . Questo è dalla pagina man di ps :

I campi SIZE e RSS non contano alcune parti di un processo incluse le tabelle delle pagine, lo stack del kernel, struct thread_info e struct task_struct. Di solito si tratta di almeno 20 KiB di memoria che è sempre residente. SIZE è la dimensione virtuale del processo (codice+dati+stack).
Annuncio pubblicitario

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.

Perché è bene che la RAM del tuo computer sia piena
CORRELATI Perché è bene che la RAM del tuo computer sia piena

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 

Installazione di sme su Ubuntu

Per installare smem su Fedora devi digitare:

 sudo dnf install smem 

Installazione di smem su Fedora

Per installare smem su Manjaro usa:

 sudo pacman -Sy smem 

Installazione di smem su Manjaro

Annuncio pubblicitario

L'utilizzo di smem senza opzioni fornisce un elenco dei processi che utilizzano la RAM.

 sme 

Invocare smem senza opzioni della riga di comando

Nella finestra del terminale viene visualizzata una tabella di informazioni.

L'output predefinito di smem

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 

Utilizzando l'opzione smem -p per richiedere le percentuali

Le dimensioni in byte sono state sostituite con le percentuali.

output sme che mostra 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 

Utilizzo dell'opzione smem -k per mostrare le dimensioni con indicatori di unità

Invece di byte grezzi, le dimensioni vengono visualizzate in megabyte, gigabyte e così via.

output smem utilizzando indicatori di unità come K, M e G

Annuncio pubblicitario

Per aggiungere una riga di totali, utilizzare l'opzione -t (totali).

 smem -k -t 

Utilizzando l'opzione smem -t per aggiungere una riga di totali all'output

L'ultima riga dell'output mostra i totali per ciascuna colonna.

La riga dei totali nella parte inferiore dell'output smem

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 

Usando l'opzione smem -u con e senza sudo

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 

Utilizzo dell'opzione smem -m per ottenere un rapporto di mappatura

Abbiamo anche chiesto valori leggibili dall'uomo e un totale.

Il report mappato smem che mostra l'utilizzo della memoria da parte delle librerie

Per visualizzare l'utilizzo della memoria a livello di sistema, utilizzare l' -w (a livello di sistema).

 smem -w -k -t 

Il rapporto sme a livello di sistema

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.

Annuncio pubblicitario

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 

Usare smem per mostrare l'utilizzo della memoria da parte di un processo e dei suoi figli

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 

Chiedere alle PMI di produrre un grafico a torta

Il grafico a torta viene visualizzato nella propria finestra di visualizzazione.

Un grafico a torta smem nella propria finestra del visualizzatore

Per vedere altri grafici, usa pss o rss invece di uss . Per vedere un grafico a barre, usa --bar invece di --pie .

Annuncio pubblicitario

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