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 root@IP_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 nome_utente@IP_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 nome_utente@IP_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.