Introduzione

Durante la risoluzione dei problemi relativi al rallentamento o al comportamento scorretto del sistema o dell'applicazione, una delle prime cose da verificare è l'utilizzo della memoria del sistema.

Questo articolo spiega come controllare l'utilizzo della RAM in Linux usando diversi comandi.

Se desideri controllare la RAM su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Comando free

free è il comando più comunemente usato per controllare l'utilizzo della memoria di un sistema Linux. Visualizza informazioni sulla memoria totale, utilizzata e libera.

Generalmente, free viene invocato con l'opzione -h che significa stampare l'output in formato leggibile dall'uomo:

free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       449Mi       166Mi       0.0Ki       1.3Gi       1.3Gi
Swap:            0B          0B          0B

Ecco cosa significa ogni colonna:

  • total: la quantità totale di memoria che può essere utilizzata dalle applicazioni.
  • used: Memoria usata. È calcolato come: used = total - free - buffers - cache
  • free: Memoria libera / non utilizzata.
  • shared: questa colonna può essere ignorata; viene mostrato solo per compatibilità con le versioni precedenti.
  • buff/cache: La memoria combinata utilizzata dai buffer del kernel e cache e slab della pagina. Questa memoria può essere recuperata in qualsiasi momento, se necessario dalle applicazioni.
  • available: stima della memoria disponibile per l'avvio di nuove applicazioni, senza scambio.

Il comando free stampa le informazioni per la memoria fisica e lo swap di sistema.

Comando top

top è un'utilità della riga di comando che visualizza informazioni in tempo reale sui processi in esecuzione. Mostra anche il riepilogo del sistema, incluso l'utilizzo della memoria.

Per invocare il comando è sufficiente digitare top:

top

L'output sarà simile al seguente:

top - 18:04:15 up 6 days,  4:27,  1 user,  load average: 0.00, 0.01, 0.00
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1939.7 total,    166.0 free,    450.4 used,   1323.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1321.5 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 100985 jenkins   20   0 2639512 382876  30480 S   0.3  19.3   7:19.48 java
      1 root      20   0  168636  12588   8416 S   0.0   0.6   0:58.16 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     10 root      20   0       0      0      0 S   0.0   0.0   0:09.42 ksoftirqd/0
     11 root      20   0       0      0      0 I   0.0   0.0   0:16.22 rcu_sched
     12 root      rt   0       0      0      0 S   0.0   0.0   0:04.52
    
...

L'intestazione dell'output include informazioni sulla memoria fisica e di swap totale, libera e utilizzata del sistema.

La colonna %MEM fornisce informazioni sulla condivisione utilizzata della memoria fisica disponibile per ciascun processo in esecuzione.

Comando /proc/meminfo

Il modo più semplice per controllare l'utilizzo della memoria RAM è visualizzare il contenuto del file virtuale /proc/meminfo. Questo file è usato dai free, top, ps, e altri comandi del sistema di informazione.

Utilizzare less o cat per visualizzare il contenuto del file /proc/meminfo:

cat /proc/meminfo

Il file include una grande quantità di informazioni sulla memoria del sistema e sull'utilizzo dello scambio:

MemTotal:        1986280 kB
MemFree:          170428 kB
MemAvailable:    1353864 kB
Buffers:           85156 kB
Cached:          1190784 kB
SwapCached:            0 kB
Active:           916192 kB
Inactive:         764900 kB
Active(anon):     405576 kB
Inactive(anon):      300 kB
Active(file):     510616 kB
Inactive(file):   764600 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               216 kB
Writeback:             0 kB
AnonPages:        405196 kB
Mapped:            87620 kB
Shmem:               724 kB

...

Le informazioni del file /proc/meminfo possono essere analizzate e utilizzate negli script di shell.

Script ps_mem

ps_memè uno script Python che riporta l'utilizzo della memoria RAM per programma. Funziona con Python 2 e 3 e può essere installato con pip:

sudo pip3 install ps_mem

L'esecuzione di ps_mem richiede i privilegi di amministratore:

sudo ps_mem

L'output includerà l'utilizzo della memoria di ciascun programma in esecuzione in ordine crescente:

 Private  +   Shared  =  RAM used       Program

104.0 KiB + 186.0 KiB = 290.0 KiB       none
204.0 KiB + 380.0 KiB = 584.0 KiB       atd
384.0 KiB + 474.0 KiB = 858.0 KiB       daemon
320.0 KiB + 600.0 KiB = 920.0 KiB       cron
380.0 KiB + 896.0 KiB =   1.2 MiB       agetty (2)
632.0 KiB +   1.2 MiB =   1.8 MiB       qemu-ga
  1.1 MiB +   1.8 MiB =   2.9 MiB       dbus-daemon
  1.0 MiB +   2.1 MiB =   3.1 MiB       systemd-timesyncd
  1.3 MiB +   1.9 MiB =   3.2 MiB       sudo
  1.9 MiB +   2.2 MiB =   4.1 MiB       systemd-udevd
980.0 KiB +   3.3 MiB =   4.2 MiB       polkitd
...

Questo script è utile quando si desidera scoprire quale programma in esecuzione sta occupando la maggior parte della memoria di sistema.

Conclusione

Ti abbiamo mostrato diversi comandi che puoi usare per controllare l'utilizzo della memoria di sistema.