
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
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}'
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
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
È 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
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
, eshmem
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 ilMADV_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.