Come controllare l'utilizzo della memoria dal terminale Linux

Una finestra terminale su un sistema Linux in stile Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

Ci sono molti modi per ottenere il minimo sull'utilizzo della memoria nel tuo sistema Linux. In questo riepilogo, tratteremo i metodi della riga di comando più comunemente usati: free, vmstat, e top. Vedremo anche la lettura /proc/meminfo direttamente.

Come Linux usa la RAM

La RAM è una risorsa limitata di cui tutti i processi, come applicazioni e demoni, vogliono un pezzo. Ce n'è solo così tanto disponibile. Il kernel arbitra i battibecchi della memoria e assegna la memoria razionata a tutti i processi affamati. È un po 'come un uccello madre con più becchi aperti puntati verso di lei per i quali ha il broncio.

La RAM inutilizzata è RAM sprecata. Linux utilizza qualsiasi RAM di riserva per cose come lo spazio del buffer di file, per mantenere il computer in esecuzione con prestazioni ottimali. È facile avere l'impressione che la RAM del tuo sistema sia stata consumata da un processo in fuga o da una perdita di memoria, ma raramente è così.

Di solito è solo il kernel che fa tenacemente il suo lavoro in background. Se ci sono altre richieste per la RAM che il kernel ha sollecitato per i propri dispositivi, abbandona immediatamente la memoria, quindi non viene fatto alcun danno.

Se il kernel decide che è più efficiente iniziare a usare lo spazio di swap, lo mette anche in gioco. C'è molta confusione riguardo al swappiness valore in Linux e quando il kernel inizierà a usare swap. Non è vero che il swappiness valore imposta una soglia per l'utilizzo della RAM che attiva lo swap da abilitare.

Ma ora, diamo un'occhiata alle diverse tecniche che puoi usare nella finestra del terminale per vedere l'utilizzo della RAM sul tuo computer Linux.

Il comando gratuito

Il comando gratuito fornisce una tabella del RAM totale, usato, libero, condiviso, buffer / cache e disponibile sul computer. Mostra anche la quantità totale di spazio di swap configurato e la quantità utilizzata e disponibile.

Nel nostro esempio, useremo il -m (mebibytes) opzione. Tuttavia, puoi anche usare -b (byte), -k (kibibyte) o -g (gibibyte).

Digitiamo il seguente comando:

free -m

Il comando "free -m" in una finestra di terminale.

Questo è l'output che otteniamo:

      total used free shared buff/cache available
Mem:   1987  901   95     80        990       811
Swap: 1521   651  869

Il Mem le colonne contengono le seguenti informazioni:

  • Totale: La quantità totale di RAM fisica su questo computer.
  • Usato: La somma di Free + Buffer + Cache sottratta dall'importo totale.
  • Gratuito: La quantità di memoria non utilizzata.
  • Condivisa: Quantità di memoria utilizzata da tmpfs file system.
  • Buff / cache: Quantità di memoria utilizzata per buffer e cache. Questo può essere rilasciato rapidamente dal kernel, se necessario.
  • A disposizione: Questa è una stima della memoria disponibile per soddisfare le richieste di memoria dalle applicazioni e da qualsiasi altro software operativo sul computer.

Il Swap le colonne contengono le seguenti informazioni:

  • Totale: La dimensione della partizione o del file di scambio.
  • Usato: La quantità di spazio di swap in uso.
  • Gratuito: La quantità di spazio di scambio rimanente (non utilizzato).

Puoi anche usare il seguente trucco intelligente che abbiamo modificato da uno dei nostri lettori per vedere la percentuale di spazio di swap che viene utilizzato:

free -m | grep Swap | awk '{print ($3/$2)*100}'

Il

RELAZIONATO: Come usare il comando gratuito su Linux

Il comando vmstat

È impossibile avere una buona comprensione del modo in cui viene utilizzata la RAM nel proprio box Linux senza apprezzare lo stato del proprio spazio di swap. RAM e spazio di swap lavorano a stretto contatto.

Puoi usare il vmstat comando per fare un tuffo più profondo nel modo in cui viene utilizzato lo spazio di scambio (o memoria virtuale). Ti fornisce un rapporto su una varietà di statistiche relative allo scambio basate sui valori medi dall'ultimo riavvio.

Digita quanto segue:

vmstat

Il comando "vmstat" in una finestra del terminale.

Questo è l'output senza il wrap-around:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b    swpd    free  buff   cache   si  so    bi   bo    in   cs  us sy id wa st
3 0  671488  576084  51088  823876   1   7    53   62    99   14   4  1 95  0  0

Ci sono molti punti dati in quel rapporto, quindi li analizzeremo:

  • proc:

    • r: Il numero di processi “eseguibili”. Stanno funzionando o aspettando il prossimo scoppio dei cicli della CPU.
    • B: Il numero di processi in modalità di sospensione ininterrotta. Non dormono, ma eseguono una chiamata di sistema bloccante. Non possono essere interrotti fino a quando non completano la loro azione corrente. In genere, questo processo è un driver di dispositivo in attesa che alcune risorse siano libere. Qualsiasi interruzione in coda per quel processo viene gestita quando il processo riprende la sua normale attività.
  • Memoria:

    • swpd: La quantità di memoria virtuale utilizzata, ovvero la quantità di memoria sostituita.
    • gratuito: La quantità di memoria inattiva (non utilizzata).
    • in forma: La quantità di memoria utilizzata come buffer.
    • nascondiglio: La quantità di memoria utilizzata come cache.
  • Scambiare:

    • SI: La quantità di memoria virtuale scambiata dallo spazio di scambio.
    • così: La quantità di memoria virtuale scambiata per scambiare spazio.
  • IO:

    • bi: Blocks in. Il numero di blocchi di dati utilizzati per scambiare la memoria virtuale su RAM.
    • bo: Blocca. Il numero di blocchi di dati utilizzati per scambiare memoria virtuale da RAM e spazio di scambio.
  • Sistema:

    • in: Il numero di interrupt al secondo, incluso l'orologio.
    • cs: Il numero di cambi di contesto al secondo. Un cambio di contesto è quando il kernel passa dall'elaborazione della modalità utente a quella di sistema.
  • PROCESSORE: Questi valori sono tutte percentuali del tempo totale della CPU:

    • noi: Tempo impiegato per eseguire il codice utente (non kernel).
    • sy: Tempo impiegato per eseguire il codice kernel.
    • id: Tempo trascorso inattivo.
    • wa: Tempo trascorso in attesa di input o output.
    • st: Il tempo in cui una macchina virtuale deve attendere che l'hypervisor completi la manutenzione di altre macchine virtuali prima che possa tornare e occuparsi di questa macchina virtuale.

RELAZIONATO: Come utilizzare il comando vmstat su Linux

Il comando principale

Il top comando visualizza una schermata piena di informazioni. I valori vengono aggiornati ogni pochi secondi.

Per usarlo, digitiamo quanto segue:

top

Il comando "top" in una finestra del terminale.

È stato premuto il tasto “e”. Ciò ha cambiato la visualizzazione in megabyte, che sono più facili da analizzare visivamente rispetto alle stringhe lunghe che rappresentano i byte. Esistono cinque righe di informazioni nella parte superiore dello schermo e un riquadro inferiore con colonne di dati.

Ecco le informazioni che troverai su ogni riga:

  • Linea uno: Il tempo, il tempo di funzionamento del computer, quante persone hanno effettuato l'accesso e quale è stata la media del carico negli ultimi uno, cinque e 15 minuti.
  • Linea due: Il numero di compiti e il loro stato: correre, fermarsi, dormire o zombi.
  • Linea tre: Informazioni sulla CPU (vedere la suddivisione dei campi di seguito).
  • Linea quattro: La quantità totale di memoria fisica e la quantità disponibile, utilizzata, memorizzata nel buffer o memorizzata nella cache.
  • Linea cinque: Quantità totale di memoria di swap e quantità libera, utilizzata e disponibile (tenendo conto della memoria che si prevede sarà recuperabile dalla cache).

I campi CPU nella riga tre sono i seguenti:

  • noi: Tempo impiegato dalla CPU per l'esecuzione dei processi per gli utenti nello spazio utente.
  • sy: Tempo impiegato dalla CPU per eseguire i processi di “spazio del kernel” del sistema.
  • ni: Tempo impiegato dalla CPU per eseguire i processi con un valore piacevole impostato manualmente.
  • id: Tempo di inattività della CPU.
  • WA: Tempo trascorso dalla CPU in attesa del completamento dell'I / O.
  • Ciao: Tempo impiegato dalla CPU per la manutenzione degli interrupt di processo.
  • SI: Il tempo impiegato dalla CPU per la manutenzione del software si interrompe.
  • st (tempo di furto): Tempo perso dalla CPU a causa dell'esecuzione di macchine virtuali.

Potrebbe essere necessario premere i tasti freccia sinistra o destra per visualizzare tutte le colonne. I valori in ciascuna colonna sono descritti di seguito:

  • PID: ID processo.
  • UTENTE: Nome del proprietario del processo.
  • PR: Priorità del processo.
  • NI: Il bel valore del processo.
  • VIRT: Memoria virtuale utilizzata dal processo.
  • RES: Memoria residente utilizzata dal processo.
  • SHR: Memoria condivisa utilizzata dal processo.
  • S: Stato del processo. (Vedi l'elenco dei valori che questo campo può assumere di seguito).
  • %PROCESSORE: La quota di tempo della CPU utilizzata dal processo dall'ultimo aggiornamento.
  • % MEM: La quota di memoria fisica utilizzata.
  • TIME +: Tempo CPU totale utilizzato dall'attività in centesimi di secondo.
  • COMANDO: Il nome o la riga del comando (nome + opzioni). (Questa colonna è fuori schermo a destra nell'immagine sopra.)

Lo stato visualizzato in S colonna può essere una delle seguenti:

  • D: Sonno ininterrotto.
  • R: In esecuzione.
  • S: Dormire.
  • T: Tracciato (interrotto).
  • Z: Zombie.

Premi Q per uscire top.

Lettura / proc / meminfo

Molti (e, molto probabilmente, la maggior parte) degli strumenti in Linux che riportano statistiche sulla memoria recuperano le loro informazioni dallo pseudo filesystem /proc/meminfo. Possiamo usare il cat o less comandi per fare lo stesso.

Digitiamo quanto segue:

less /proc/meminfo

Il comando "less / proc / meminfo" in una finestra del terminale.

Potresti visualizzare campi diversi a seconda del kernel in esecuzione e dell'architettura della CPU. Abbiamo ottenuto i seguenti risultati sulla nostra macchina virtuale:

MemTotal:          2035260 kB
MemFree:            919064 kB
MemAvailable:      1300932 kB
Buffers:             33528 kB
Cached:             457604 kB
SwapCached:          29732 kB
Active:             313360 kB
Inactive:           603276 kB
Active(anon):        74648 kB
Inactive(anon):     355004 kB
Active(file):       238712 kB
Inactive(file):     248272 kB
Unevictable:            16 kB
Mlocked:                16 kB
SwapTotal:         1557568 kB
SwapFree:           873024 kB
Dirty:                  80 kB
Writeback:               0 kB
AnonPages:          414100 kB
Mapped:              97436 kB
Shmem:                4148 kB
KReclaimable:        52932 kB
Slab:                94216 kB
SReclaimable:        52932 kB
SUnreclaim:          41284 kB
KernelStack:          9280 kB
PageTables:          45264 kB
NFS_Unstable:            0 kB
Bounce:                  0 kB
WritebackTmp:            0 kB
CommitLimit:       2575196 kB
Committed_AS:      5072192 kB
VmallocTotal:  34359738367 kB
VmallocUsed:         35712 kB
VmallocChunk:            0 kB
Percpu:                720 kB
HardwareCorrupted:       0 kB
AnonHugePages:           0 kB
ShmemHugePages:          0 kB
ShmemPmdMapped:          0 kB
CmaTotal:                0 kB
CmaFree:                 0 kB
HugePages_Total:         0
HugePages_Free:          0
HugePages_Rsvd:          0
HugePages_Surp:          0
Hugepagesize:         2048 kB
Hugetlb:                 0 kB
DirectMap4k:        180160 kB
DirectMap2M:       1916928 kB

Tutte le dimensioni sono in kibibyte se non diversamente indicato. Ecco cosa significano tutti, insieme ad alcuni altri che potresti vedere a seconda della configurazione e dell'hardware del tuo computer:

  • MemTotal: RAM utilizzabile totale (a parte alcuni bit riservati e il codice binario del kernel).
  • MemFree: La somma di LowFree+HighFree. La quantità di RAM attualmente disponibile.
  • MemAvailable: Memoria stimata disponibile per l'avvio di nuove applicazioni, senza scambio.
  • buffer: Memoria temporanea per blocchi di dischi grezzi. Ciò riduce l'ingresso e l'uscita del disco rigido. Inoltre, accelera l'accesso alle richieste successive per gli stessi dati perché è già in memoria.
  • Cached: Pagine memorizzate nella cache da file sul disco rigido (non incluso SwapCached).
  • SwapCached: Memoria che è stata scambiata dentro e indietro e una copia rimane nello spazio di scambio.
  • Attivo: Memoria utilizzata di recente. Non è recuperato se non assolutamente necessario.
  • Non attivo: Memoria che è stata utilizzata, ma non l'ultima utilizzata. È un probabile candidato alla bonifica.
  • Attivo (anon): Memoria allocata ai file creati in a tmpfs pseudo-file system. I file anonimi non risiedono sul disco rigido.
  • Inattivo (anon): Quantità di anonimo, tmpfs, e shmem memoria che è un candidato allo sfratto (recupero della memoria).
  • Attivo (file): Quantità di memoria cache di file in uso o utilizzata dal precedente ciclo di recupero della memoria.
  • Inattivo (file): Quantità di memoria cache di file letta da un disco rigido che è candidato per il recupero.
  • Unevictable: Quantità di memoria che dovrebbe essere evitabile, ma non perché è bloccata nella memoria dai processi dello spazio utente.
  • Mlocked: La quantità totale di memoria non è evitabile perché è bloccata dai processi dello spazio utente.
  • HighTotal: Quantità totale di HighMem, utilizzata dai programmi dello spazio utente e dalla cache della pagina. Il kernel può accedere a questa zona di memoria, ma è più lento rispetto a LowMem.
  • HighFree: Quantità di HighMem gratuita.
  • LowTotal: Quantità di LowMem, disponibile per tutti gli stessi usi di HighMem, ma anche per l'utilizzo da parte del kernel per i propri scopi.
  • LowFree: Quantità di LowMem gratuita.
  • MmapCopy: Quantità di memoria che è stata mappata ai dati del file.
  • SwapTotal: Quantità totale di spazio di swap disponibile.
  • SwapFree: Quantità di spazio di swap attualmente inutilizzata.
  • Sporco: Quantità di memoria in attesa di essere riscritta sul disco.
  • Rispondere: Memoria attivamente riscritta sul disco.
  • AnonPages: Pagine di backup non di file associate a tabelle di pagine dello spazio utente.
  • mappato: File (come librerie) mappati in memoria.
  • shmem: Quantità di memoria consumata tmpfs pseudo-file system.
  • KReclaimable: Allocazioni di memoria del kernel che il kernel tenterà di recuperare se la richiesta di memoria è abbastanza grave.
  • Lastra: Cache delle strutture dati nel kernel.
  • SReclaimable: Quantità di Slab memoria che potrebbe essere recuperata, come le cache.
  • SUnreclaim: Quantità di Slab memoria che non può essere recuperata.
  • KernelStack: Quantità di memoria allocata agli stack del kernel.
  • PageTables: Quantità di memoria dedicata al livello più basso delle tabelle di pagine.
  • QuickLists: Poiché l'allocazione e l'eliminazione delle tabelle di pagine è un'operazione molto frequente, è fondamentale che sia il più rapido possibile. Pertanto, le pagine utilizzate per le tabelle delle pagine vengono memorizzate nella cache in una serie di elenchi diversi chiamati “elenchi rapidi”.
  • NFS_Unstable: Pagine del file system di rete (NFS) ricevute dal server, ma non ancora scritte nella memoria non volatile.
  • Rimbalzo: Memoria utilizzata per i buffer di rimbalzo del dispositivo a blocchi. Un buffer di rimbalzo è posizionato in memoria abbastanza basso da consentire a un dispositivo di accedervi direttamente. I dati vengono quindi copiati nella pagina utente desiderata in HighMem.
  • WritebackTmp: Memoria utilizzata dal filesystem in Userspace (FUSE) per buffer di riscrittura temporanea.
  • CommitLimit: La quantità totale di memoria attualmente disponibile da allocare nel sistema.
  • Committed_AS: La quantità di memoria stimata per soddisfare tutte le esigenze attuali. Se un programma richiede un po 'di RAM, la richiesta viene registrata, ma la RAM viene allocata solo quando il programma inizia a usarla. Viene inoltre assegnato solo come richiesto, fino all'importo massimo del programma riservato. È possibile “allocare” più memoria di quella che può essere effettivamente erogata. Se tutti i programmi provano a incassare i loro chip RAM contemporaneamente, il casinò della memoria potrebbe fallire (e deve andare a capo in mano ai finanziatori dello spazio di scambio).
  • VMallocTotal: Dimensione totale dell'area di memoria di vmalloc.
  • VMallocUsed: Quantità di area vmalloc utilizzata. A partire da Linux 4.4, questo campo non è più calcolato, è codificato.
  • VMallocChunk: Il più grande blocco contiguo di area vmalloc libera.
  • HardwareCorrupted: Quantità di memoria contrassegnata come con problemi di corruzione della memoria fisica. Non verrà assegnato.
  • LazyFree: Quantità di memoria in MADV_FREE stato. Quando un'applicazione imposta il MADV_FREE bandiera su un intervallo di pagine, ciò indica che non le richiede più e che ora sono candidati alla bonifica. Il recupero effettivo potrebbe essere ritardato fino a quando non vi sarà una richiesta sufficiente di memoria. Se l'applicazione inizia a scrivere su pagine, il recupero può essere annullato.
  • AnonHugePages: Grandi pagine non supportate da file mappate in tabelle di pagine dello spazio utente. Le pagine non supportate da file non provenivano da un file del disco rigido.
  • ShmemHugePages: Quantità di memoria utilizzata dalla memoria condivisa (shmem) e sistemi pseudo-file (tmpfs) assegnato con pagine enormi.
  • ShmemPmdMapped: Quantità di memoria condivisa mappata nello spazio utente con pagine enormi.
  • CmaTotal: Quantità di pagine CMA (Contiguous Memory Allocator). Questi sono utilizzati da dispositivi che possono comunicare solo con regioni contigue di memoria.
  • CmaFree: Quantità di pagine CMA (Contiguous Memory Allocator) gratuite.
  • HugePages_Total: Enorme dimensione del pool di pagine.
  • HugePages_Free: Numero di pagine enormi non allocate nel pool.
  • HugePages_Rsvd: Numero di pagine enormi riservate. L'impegno di allocazione è stato assunto, ma l'allocazione non è ancora avvenuta.
  • HugePages_Surp: Numero di pagine enormi nel pool sopra il valore di sistema definito.
  • Hugepagesize: Dimensioni di pagine enormi.
  • DirectMap4k: Numero di byte di RAM associati a pagine da 4 kB.
  • DirectMap4M: Numero di byte di RAM associati a pagine da 4 MB.
  • DirectMap2M: Numero di byte di RAM associati a pagine da 2 MB.
  • DirectMap1G: Numero di byte di RAM associati a pagine da 2 GB.

Come al solito con Linux, esiste più di un modo per ottenere una rapida panoramica e sempre almeno un modo per approfondire i dettagli.

Probabilmente lo userai free, top, e vmstate regolarmente e mantieni /proc/meminfo in riserva per quando è necessario effettuare un'immersione profonda per indagare su un problema specifico.

Articoli correlati

Ultimi articoli