Linux / Comando free: leggere RAM, cache, available e swap
free è un comando che fornisce un riepilogo dell'uso della memoria fisica (RAM) e dello swap su un sistema Linux. Quando si determina se la memoria è insufficiente, è meglio controllare prima la colonna available, che stima la quantità che può essere utilizzata per avviare nuovi programmi senza ricorrere allo swap, piuttosto che interpretare isolatamente la colonna free.
free -h
Linux utilizza la RAM inutilizzata per la cache dei file e la recupera quando necessario. Pertanto, non dovresti concludere che la memoria sia bassa solo perché il valore di free è piccolo e buff/cache è grande.
Informazioni mostrate dal comando free
free legge /proc/meminfo fornito dal kernel per calcolare informazioni sulla memoria fisica e sullo swap. Le definizioni di ciascuna colonna e delle opzioni possono essere trovate nel manuale ufficiale di procps-ng free.
free -h
Questo è un esempio illustrativo con valori arrotondati, non una misura del tuo sistema. Per la definizione attuale di procps-ng, 15 GiB di total meno 10 GiB di available danno circa 5 GiB di used. Formato, arrotondamenti e formula di used possono differire nelle versioni precedenti: controlla free --version e il manuale installato.
total used free shared buff/cache available
Mem: 15Gi 5.0Gi 1.1Gi 320Mi 9.7Gi 10Gi
Swap: 2.0Gi 128Mi 1.9Gi
Comprendere il significato di ciascuna colonna
total, used, free
| Colonna | Significato | Interpretazione |
|---|---|---|
total |
Memoria fisica totale utilizzabile | Potrebbe non corrispondere esattamente alla RAM installata totale. Le aree riservate dal kernel e dall'hardware sono escluse. |
used |
Memoria in uso o non immediatamente disponibile | Attualmente, procps-ng la calcola come memoria fisica total - available. Il metodo di calcolo potrebbe essere stato diverso a seconda della versione. |
free |
Memoria non utilizzata per alcuno scopo | Non include la memoria utilizzata come cache che può essere recuperata. |
shared e buff/cache
shared corrisponde a Shmem, usata soprattutto da tmpfs, un filesystem in memoria, e dalla memoria condivisa. buff/cache combina Buffers, Cached e SReclaimable, cioè buffer, cache di pagina e parte recuperabile delle strutture slab del kernel. Queste colonne non sono tutte componenti indipendenti da sommare: shared è già rappresentata anche in altre statistiche.
La cache memorizza i dati letti dal disco nella RAM per consentire un riaccesso più rapido. Se un'applicazione ha bisogno di memoria, il kernel può recuperarla, quindi avere una cache grande non è problematico di per sé.
Perché "available" è importante
available stima la RAM utilizzabile da nuove applicazioni senza iniziare a usare lo swap. Sui kernel che forniscono MemAvailable, il calcolo considera memoria libera, cache di file, slab recuperabile e riserve minime: non coincide con free + buff/cache. La documentazione del kernel su meminfo spiega questi contatori; su kernel più vecchi procps-ng può stimare il valore con un metodo diverso.
Questo valore non è nemmeno una garanzia assoluta sull'uso futuro della memoria. Se un'applicazione richiede improvvisamente una grande quantità di memoria o se il kernel ha difficoltà a recuperare la memoria, la situazione può cambiare rapidamente.
Differenza tra le righe Mem e Swap
Riga della memoria fisica
La riga Mem riassume la dimensione totale e l'utilizzo della RAM effettiva. Include vari usi come la memoria delle applicazioni, del kernel, della cache e della memoria condivisa.
Riga Swap
Swap mostra la capacità totale, utilizzata e libera dell'area di swap, non della RAM. Non è possibile concludere che ci sia attualmente una carenza di memoria solo perché l'uso dello swap non è 0. Questo perché le pagine inattive che sono state precedentemente spostate possono rimanere nello swap anche dopo che la RAM è disponibile.
Una crescita dello swap, attività persistente nei campi si e so di vmstat e peggioramento dei tempi di risposta sono segnali da correlare. si indica memoria riportata dallo swap alla RAM, so memoria spostata nello swap, per secondo. Con vmstat 1 il monitoraggio continua fino a Ctrl+C; la prima riga dei contatori di attività riassume il periodo dall’avvio, mentre le successive riguardano l’intervallo di campionamento, come precisa il manuale procps di vmstat.
vmstat 1
Opzioni comuni
Visualizzare con unità leggibili
free -h
-h o --human sceglie automaticamente una scala binaria, per esempio Ki, Mi o Gi. -m fissa l’uscita in MiB e -g in GiB, non in MB e GB decimali; valori piccoli possono essere arrotondati a zero. Inizia con free -h su un sistema Linux con procps-ng e confronta le intestazioni, senza aspettarti i numeri dell’esempio.
free -m
free -g
Separare buffer e cache
free --wide
-w o --wide separa buff/cache nelle colonne buffers e cache. Per analizzare la causa dettagliata, dovresti anche guardare /proc/meminfo, slabtop e altri.
Visualizzazione ripetuta a intervalli regolari
free -h -s 2
-s 2 ripete la misura a intervalli di circa due secondi; Ctrl+C termina il monitoraggio. Aggiungi -c 5 per ottenere cinque report e tornare automaticamente al prompt, senza lasciare un comando in esecuzione continua.
free -h -s 2 -c 5
Mostrare i totali di RAM e swap
free -h --total
-t o --total aggiunge una riga con i totali delle colonne. RAM e swap hanno ruoli e prestazioni differenti: la somma non è RAM veloce disponibile né sostituisce MemAvailable. Non sommare indiscriminatamente tutte le colonne della riga Mem.
Valutare la pressione sulla memoria
Visualizzare la memoria disponibile insieme alle operazioni di I/O dello swap
È meglio osservare i seguenti segnali piuttosto che un singolo output di free.
- Se
availablecontinua a essere più basso del solito - Se l’uso dello swap aumenta
- Se
siesoinvmstatsi verificano continuamente - Se il tempo di risposta del servizio e l'I/O del disco peggiorano insieme
- Verificare se ci sono record di terminazione OOM (Out of Memory) nel registro del kernel
free -h
vmstat 1 5
journalctl -k --no-pager --case-sensitive=no -g 'oom|Out of memory|Killed process'
La sequenza sopra usa vmstat 1 5 per terminare dopo cinque report prima di passare ai log. journalctl -k cerca nel journal del kernel dell’avvio corrente; può richiedere permessi e registrazioni disponibili. -g usa espressioni compatibili con Perl: le alternative sono separate da |, senza barra inversa. L’opzione per ignorare il caso evita di perdere OOM maiuscolo. Consulta il manuale ufficiale di journalctl e verifica le opzioni della versione installata. Nessun risultato non dimostra l’assenza di tutti gli eventi OOM, in particolare di quelli avvenuti prima di un riavvio o in un altro ambito.
Trovare i processi che utilizzano molta memoria
Con procps, --sort=-rss ordina i processi per RSS decrescente; head mostra normalmente dieci righe, intestazione inclusa. PID è l’identificativo del processo, USER l’utente e COMM il nome del comando.
ps -eo pid,user,%mem,rss,comm --sort=-rss | head
RSS (Resident Set Size) esprime in KiB la memoria residente del processo; %MEM è una percentuale rispetto alla memoria fisica del sistema. Le pagine condivise possono essere contate in più processi: la somma degli RSS non coincide con used di free. Per distinguere memoria privata e condivisa considera PSS (Proportional Set Size), che ripartisce le pagine condivise, tramite strumenti come smem e i dati dei cgroup (gruppi di controllo delle risorse).
Non svuotare la cache in maniera incondizionata
La cache di pagina è gestita dal kernel per migliorare le prestazioni del sistema. Svuotare forzatamente la cache solo per migliorare l’aspetto del report di free può aumentare le letture del disco e ridurre effettivamente le prestazioni. Eseguire questa operazione solo quando vi è uno scopo chiaro, come un test di prestazioni riproducibile, e quando si comprendono l'impatto e i metodi di ripristino.
Unità e automazione
Unità binarie e unità decimali
La visualizzazione predefinita di -h utilizza la serie KiB, MiB, GiB basata su 1024. L'utilizzo di --si utilizza la serie kB, MB, GB basata su 1000.
free -h --si
Mescolare unità diverse nella documentazione o nel monitoraggio può creare discrepanze, quindi specificare lo standard.
Evitare il parsing dell’output formattato
Colonne e formule possono cambiare fra versioni di procps-ng; le unità automatiche di -h sono poco adatte agli script. Usa i nomi dei campi di /proc/meminfo oppure metriche strutturate di un agente, documentando versione e unità. In meminfo l’etichetta kB rappresenta tradizionalmente 1.024 byte, mentre i file di memoria dei cgroup v2 usano byte: non mescolare queste scale. Non sostituire un campo mancante con zero senza verificarne il significato.
Perché free può mostrare più memoria del limite del container
free legge /proc/meminfo. A seconda del runtime del container e della configurazione dei cgroup, questo file può mostrare valori vicini alla memoria totale dell'host, che possono differire dai limiti di memoria effettivamente applicati al container.
Per un container controlla limiti dell’orchestratore, uso e limite effettivo del cgroup ed eventi OOM. Nei cgroup v2 pertinenti memory.current misura l’uso del gruppo e dei discendenti, memory.max il limite e memory.events gli eventi; max indica l’assenza di un limite a quel livello. Individua il gruppo del container prima di leggere i file: percorso, visibilità e limiti ereditati dipendono da runtime e namespace. La differenza max meno current non è MemAvailable e non garantisce una nuova allocazione. Le definizioni sono nella documentazione del controller di memoria cgroup v2.
Domande frequenti
La colonna free quasi a zero indica memoria insufficiente?
Non necessariamente. Quando Linux utilizza la memoria residua come cache, free può essere piccolo. Controllare insieme available, I/O di swap e prestazioni del servizio.
Tutta la memoria buff/cache è recuperabile?
Una parte può essere recuperata quando serve, ma non tutta è immediatamente recuperabile. available è una stima che considera questa differenza, quindi è meglio non aggiungere semplicemente tutto buff/cache come memoria libera.
Usare lo swap significa sempre che la RAM è insufficiente?
No. Le pagine inattive del passato possono rimanere nello swap. È necessario controllare la tendenza all'aumento dell'utilizzo dello swap, insieme all'effettivo input/output dello swap e ai ritardi.
Perché il valore used differisce da quello di altri strumenti?
Il modo in cui vengono classificati cache e memoria recuperabile può variare a seconda dello strumento e della versione. Confronta /proc/meminfo nello stesso momento, la versione di procps-ng e le definizioni di ciascuno strumento.
Riepilogo
free -h è un comando di base per controllare rapidamente lo stato della RAM e dello swap. Per determinare la carenza di memoria, non dovresti guardare solo la colonna free, ma considerare insieme available, l'input/output dello swap, l'utilizzo dei processi e i ritardi dei servizi.
Se il carico è elevato nello stesso momento, fai riferimento a come interpretare il carico medio usando il comando uptime per controllare anche i colli di bottiglia della CPU e dell'I/O.




