La RAM, per Random Access Memory, è un componente critico di un sistema Linux che deve essere monitorato da vicino.
In alcuni casi, si potrebbe esaurire la memoria, lasciando il tuo server con tempi di risposta molto lenti o completamente non reattivo.
Di conseguenza, sapere come controllare la RAM su Linux è fondamentale perché potresti essere in grado di intraprendere azioni preventive invece che correttive.
Si potrebbe anche voler aumentare la memoria di swap, conosciuta anche come memoria virtuale, al fine di migliorare le prestazioni del vostro server.
In questo tutorial, elencheremo tutti i modi per controllare la RAM su Linux.
Tabella dei contenuti
Controllare la RAM su Linux usando free
Il comando più popolare per controllare la RAM su Linux è usare il comando “free”.
$ free total used free shared buff/cache availableMem: 4039588 3475216 137584 39596 426788 287580Swap: 0 0 0
Come potete vedere, l’output è diviso in due categorie: memoria (la RAM effettiva) e swap (chiamato anche memoria virtuale).
Utilizzando free, vi vengono fornite le seguenti informazioni :
- totale: la quantità totale di memoria attualmente installata sul vostro sistema in kilobyte;
- usata: la quantità di RAM attualmente utilizzata sul vostro sistema in kilobyte;
- libera : la quantità di memoria libera disponibile sul sistema in kilobyte;
- condivisa: rappresenta la memoria utilizzata da tmpfs che è un filesystem virtuale che sembra essere montato ma appartiene alla memoria volatile;
- buffers : memoria usata dai buffer del kernel;
- cache : il numero di memoria usata dalla page cache dove i dati potrebbero essere memorizzati prima di essere scritti su disco;
- disponibile : la memoria disponibile sul sistema in kilobyte
Nota che anche se molta memoria potrebbe essere usata dalla cache o dai buffer, il kernel può liberare questo spazio se il sistema richiede più memoria per i processi.
Come il comando lsblk che abbiamo scoperto nei nostri tutorial sul disco, il comando “free “può essere visualizzato in un formato a misura d’uomo.
Per controllare la RAM attualmente disponibile usando un formato a misura d’uomo, usate “free” con l’opzione “-h”.
total used free shared buff/cache availableMem: 3.9G 3.3G 127M 38M 400M 256MSwap: 0B 0B 0B
Come potete vedere, l’output è più facile da leggere ma è arrotondato.
Similmente, con il comando free si è in grado di visualizzare le colonne totali per controllare la quantità totale di RAM e swap disponibile sul sistema.
Per mostrare le colonne totali, utilizzare “free” con l’opzione “-t”.
$ free -t total used free shared buff/cache availableMem: 4039588 3499392 128828 39596 411368 263292Swap: 0 0 0Total: 4039588 3499392 128828
Nota che i comandi possono essere combinati in modo da avere un output a misura d’uomo e visualizzare le colonne totali.
$ free -th total used free shared buff/cache availableMem: 3.9G 3.3G 125M 38M 402M 257MSwap: 0B 0B 0BTotal: 3.9G 3.3G 125M
Controlla la RAM usando vmstat
Un altro ottimo modo per controllare l’attuale utilizzo della memoria virtuale è usare il comando “vmstat”.
L’output potrebbe essere un po’ difficile da leggere ma ecco i dettagli delle colonne visualizzate :
- r : numero di processi eseguibili sul vostro sistema;
- b : numero di processi in sleep ininterrotto;
- swpd : la quantità di RAM attualmente utilizzata dal vostro sistema;
- free : la memoria disponibile
- buff, cache : la RAM utilizzata dai buffer del kernel e dalle cache di pagina;
- inactive, active : la quantità di memoria inattiva e attiva
- si : lo swap utilizzato dal disco
- so : la memoria swappata sul disco
Le altre colonne sono relative all’I/O del disco e all’utilizzo della CPU che potrebbero non essere rilevanti nel nostro caso.
$ vmstat -s 4039588 K total memory 3460532 K used memory 3398428 K active memory 198356 K inactive memory 162648 K free memory 48904 K buffer memory 367504 K swap cache 0 K total swap 0 K used swap 0 K free swap
Come potete vedere, vi viene fornito un gran numero di righe ma solo alcune sono rilevanti per quello che stiamo cercando di ottenere.
In cima all’output di vmstat, potete vedere la memoria totale, la memoria usata, la memoria attiva (che è equivalente alla memoria usata), la memoria inattiva e quella libera.
Queste colonne sono molto simili a quelle visualizzate usando il comando free.
Vi viene fornita anche la memoria buffer, la swap cache (che è equivalente alla page cache) e lo swap totale, se presente.
Ispezionare /proc/meminfo per controllare la RAM
Come già sapete, il Kernel è quello che virtualizza il filesystem e fornisce punti di ingresso ad alcuni dei vostri dispositivi sul sistema.
Per esempio, la directory /proc potrebbe memorizzare riferimenti ai processi sul vostro sistema (cioè descrittori di file); allo stesso modo la /dev memorizzerà riferimenti a dispositivi virtuali che alla fine puntano a dischi reali.
Tuttavia, un file del file /proc potrebbe essere più importante degli altri quando si tratta di controllare la RAM: meminfo.
Come puoi vedere, il kernel ti fornisce statistiche vicine a quelle visualizzate nel comando “free” o “vmstat”.
Questo in realtà non è una grande sorpresa perché quei comandi stanno effettivamente ottenendo le loro informazioni dal file meminfo stesso.
Utilizzando il file /proc/meminfo, avete accesso alla quantità totale di memoria del vostro sistema, la memoria libera disponibile, la memoria disponibile così come i buffer e le cache di pagina che possono essere utilizzati.
Infine, si ha accesso alla cache di swap così come allo swap attivo e inattivo utilizzato.
Elenco dell’hardware della RAM usando dmidecode
Tutti i comandi usati prima sono molto utili, ma possono essere usati solo per controllare la RAM utilizzata in un dato momento.
In alcuni casi, potreste essere interessati a conoscere meglio il vostro hardware RAM.
Per farlo, dovete usare il comando dmidecode.
Attenzione: potreste dover essere sudo per eseguire dmidecode sul vostro sistema.
$ sudo dmidecode# dmidecode 3.1Getting SMBIOS data from sysfs.SMBIOS 2.4 present.13 structures occupying 405 bytes.Table at 0x000F10D0.Handle 0x0000, DMI type 0, 24 bytesBIOS Information Vendor: Private Version: 20171212 Release Date: 12/12/2017 Address: 0xE8000 Runtime Size: 96 kB ROM Size: 64 kB Characteristics: BIOS characteristics not supported Targeted content distribution is supported BIOS Revision: 1.0
Di default, il dmidecode è utilizzato per eseguire un dump di tutto l’hardware utilizzato sul vostro sistema.
Per ottenere l’hardware dedicato alla vostra memoria, dovete specificare il tipo di hardware utilizzato.
$ sudo dmidecode --type memory# dmidecode 3.1 Getting SMBIOS data from sysfs. SMBIOS 2.4 present. Handle 0x1000, DMI type 16, 15 bytes Physical Memory Array Location: Other Use: System Memory Error Correction Type: Multi-bit ECC Maximum Capacity: 4 GB Error Information Handle: Not Provided Number Of Devices: 1 Handle 0x1100, DMI type 17, 21 bytes Memory Device Array Handle: 0x1000 Error Information Handle: 0x0000 Total Width: 64 bits Data Width: 64 bits Size: 4096 MB Form Factor: DIMM Set: None Locator: DIMM 0 Bank Locator: Not Specified Type: RAM Type Detail: None
Come si può vedere, l’output di dmidecode è piuttosto utile: con esso è possibile conoscere meglio la capacità massima del sistema e come è distribuita.
In questo esempio, il mio sistema è dotato di 4 GB di memoria totale fornita da una singola RAM situata nello spazio di memoria DIMM 0.
Usando l’immagine fornita qui, la memoria RAM sarebbe stata introdotta nel primo slot disponibile (DIMM 0)
Controlla l’uso della RAM usando Prometheus
I metodi descritti sopra funzionano molto bene, ma sono un po’ antiquati rispetto alle moderne soluzioni di monitoraggio.
Un ottimo modo per monitorare l’utilizzo della RAM è quello di utilizzare uno stack di monitoraggio moderno come Prometheus & Grafana.
Prometheus espone un Node Exporter che può essere utilizzato per raccogliere le metriche dell’host, in particolare quelle della memoria.
Controllando sulla pagina Github di Node Exporter, si dovrà attivare il collettore “meminfo” che è specializzato nella raccolta di metriche di memoria dal file /proc/meminfo.
Da lì, si può facilmente importare una dashboard esistente in Grafana al fine di avere statistiche in tempo reale sulla memoria del sistema.
Controllando il tutorial di Node Exporter che abbiamo linkato prima si dovrebbe ottenere lo stesso risultato, è possibile scegliere la dashboard Grafana di vostra scelta qui.
Traccia l’utilizzo della RAM utilizzando i comandi top/htop
Infine, potresti trovare utile utilizzare i comandi interattivi top e htop per tracciare l’utilizzo della memoria.
Top è installato nativamente sul tuo sistema, esegui semplicemente “top” per ottenere le statistiche sul tuo sistema.
Come puoi vedere qui, ti vengono fornite le statistiche della CPU ma anche la quantità totale di RAM e swap usata dal tuo sistema.
Ti vengono anche date le quantità disponibili così come le cache buffer e page usate.
Le statistiche sono date per l’intero sistema ma sono anche fornite per ogni singolo processo sull’istanza ordinata dall’alto verso il basso.
Il comando htop può anche essere efficacemente utilizzato al fine di fornire un monitoraggio della memoria di facile utilizzo sul vostro server.
Htop potrebbe non essere installato nativamente sul vostro sistema, quindi potreste doverlo installare.
$ sudo apt-get install htop$ sudo yum install htop
Quando htop è installato, potete iniziare a eseguirlo eseguendo “htop”
Come potete vedere, i risultati sono abbastanza simili: sono solo resi più facili da leggere.
Conclusione
In questo tutorial, hai imparato a conoscere i diversi modi per controllare la RAM su Linux usando la riga di comando o le moderne soluzioni di monitoraggio come Prometheus e Grafana.
Se hai bisogno di migliorare la gestione della memoria sul tuo sistema, dovresti assolutamente controllare i tutorial relativi allo swap in quanto elaborano maggiormente l’importanza della memoria virtuale sul tuo sistema.
Se sei interessato all’amministrazione del sistema Linux, assicurati di dare un’occhiata agli altri tutorial che abbiamo sull’argomento.