Esaurimento della RAM in un Cloud VPS

Tempo di lettura: 3 minuti
Aggiornata 4 mesi fa

Questa guida illustra come riconoscere e gestire le situazioni in cui un Cloud VPS esaurisce la memoria RAM a disposizione.

Il problema in poche parole

La RAM è la memoria di lavoro utilizzata dal server per gestire i processi in esecuzione; è limitata in base al piano scelto e può essere saturata dall’esecuzione di troppe task in contemporanea.

Queste task potrebbero essere di tipo legittimo (un picco di visite al sito, visualizzazioni o download) oppure l’effetto di un malware che fa eseguire operazioni all’elaboratore contro la tua volontà. Entrambe le situazioni sono realistiche e frequenti, e capire quale si stia affrontando è fondamentale. Torneremo su questo punto nell’ultimo paragrafo.

Quando la totalità della memoria disponibile è già occupata e un nuovo processo ne richiede dell’altra, il server inizia a interrompere (in gergo, “uccidere”) le operazioni già in corso per creare lo spazio necessario, scegliendole in modo casuale. È possibile che ciò interrompa un qualche processo vitale, bloccando del tutto la macchina. Oltretutto questa continuerebbe a rispondere ai ping della rete, dunque non risulterebbe “irraggiungibile” dall’esterno, rendendo più difficile l’individuazione del problema.

Come monitorare l’uso della RAM

Per accertare se un server ha sufficiente memoria RAM a disposizione e se la sta impiegando nel modo previsto, occorre monitorarlo. Di seguito illustriamo tre diversi modi per farlo: usali congiuntamente per avere un quadro completo della situazione, particolarmente nei momenti di intensa attività o di funzionamento anomalo.

Quantificare la memoria in uso

Il comando SSH free consente di effettuare una fotografia dello stato della memoria RAM del server.

root@shellrent:~# free -m
 total used free shared buffers cached
Mem: 32066 31559 507 1701 273 29658
-/+ buffers/cache: 1627 30439
Swap: 6140 3 6137
root@shellrent:~#

Nell’esempio dato, il comando restituisce i valori in megabyte (per via della flag -m) della quantità di memoria complessiva (in rosso), di quella attualmente impiegata (in verde) e di quella ancora libera e disponibile (in blu). Il server dispone di un totale di 32 GB di RAM e ne sta utilizzando soltanto 2, con i restanti 30 in attesa.

Analizzare i log

In caso di esaurimento della RAM, solitamente il log di sistema (accessibile in var/log/syslog) riporta dei messaggi simili a questi.

Jun 4 07:41:59  kernel: [70667120.897649] Out of memory: Kill process 29957 (java) score 366 or sacrifice child
Jun 4 07:41:59  kernel: [70667120.897701] Killed process 29957 (java) total-vm:2532680kB, anon-rss:1416508kB, file-rss:0kB

Individuare i processi critici

È fondamentale capire quali sono i processi che saturano la memoria. Possiamo farlo con il comando SSH ps aux –sort -rss, che ci restituirà l’elenco dei processi che stanno consumando più risorse RAM in un dato momento.

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 10619 1.4 0.3 1256576 120816 ? Sl 12:14 0:01 /usr/sbin/mysqld --basedir=/usr --
root 269 0.0 0.2 118816 70484 ? Ss 2016 14:42 /lib/systemd/systemd-journald
bind 864 0.0 0.1 702208 39316 ? Ssl 2016 42:23 /usr/sbin/named -f -u bind
root 10140 0.0 0.0 343924 20348 ? Ss 12:14 0:00 /usr/sbin/apache2 -k restart

Analizzando questa lista dovresti poter capire se si tratta di programmi e funzionalità legittime o piuttosto dell’attività di un malware che ha infettato il server.

 

Come risolvere la cosa

Se il server esaurisce le risorse disponibili semplicemente a causa del carico di visitatori o della complessità delle elaborazioni, l’unica soluzione è effettuare un upgrade a un piano Cloud VPS superiore. Vedi la guida upgrade di risorse al tuo server cloud per maggiori informazioni.

Se invece la precedente analisi ha messo in luce l’esistenza di processi sospetti, che non riconosci come componenti della tua piattaforma software, ti incoraggiamo ad approfondire la questione effettuando una scansione del server o contattando l’assistenza clienti tramite ticket.

[print-me target=".print-target" printstyle="pom-small-black"/]