Nelle ultime settimane ho iniziato ad avere parecchi problemi con i VPS 2016 di OVH.
Improvvisamente dopo alcuni mesi di lavoro, senza riscontrare problematiche particolari, alcuni server hanno iniziato a collassare ed arrancare.
Dopo un po’ di debug ho capito che il problema era la RAM, di fatto alcuni processi sotto certi carichi di lavoro non avevano risorse libere.
La questione strana era che i VPS dalla macchina Linux, tramite il comando top, mi segnava occupati 300MB di ram (su 2GB), dal pannello di controllo di OVH invece, mi indicava che la ram utilizzata era di 1,7GB, quindi i conti non tornavano.
Tramite il comando free -m ho scoperto l’arcano di questa discrepanza, una parte della ram è occupata dalla cache (che è corretto, di fatto linux tende ad occupare tutta la ram che ha disponibile, per ridurre gli accessi al disco), nel mio caso quindi avevo
RAM Totale = 2000 MB
RAM utilizzata = 300 MB
Cache = 1400 MB
RAM libera = 300 MB
Come vediamo in questo caso la ram effettivamente libera è di SOLO 300 MB, capite bene anche voi che vedendo il problema da questo lato, se le chiamate che vengono fatte non trovano i dati in cache, devono andare ad usare i 300 MB liberi che ci restano.
La domanda che vi pongo a questo punto è: cosa succede se inizio ad avere più 300MB di dati da allocare quando sono sotto alti carichi di lavoro?
Molto semplicemente la macchina finisce la RAM (chiaramente inzierà ad ottimizzare la memoria, scaricando la cache, se possibile, ma se i dati sono in cache probabilmente sono dati acceduti di frequente e quindi non verranno scaricati) e di conseguenza inizierà l’attività di SWAP.
E qui che arriva il nostro problema: di default i VPS 2016 di OVH non sono dotati di partizione di swap, a causa di questo le mie macchine iniziavano a rispondere male e per non collassare definitivamente, Linux inizia a killare i processi (il famoso oom-killer), uccidendo di fatto processi di apache e di mysql…
Soluzione
Ed eccoci alla soluzione, che almeno fino ad ora, mi ha arginato il problema.
Non possiamo creare delle partizioni di swap, di fatto il tipo di sistema non ce lo permette, ma possiamo creare lo swap in un file, un po’ come fa Windows per intenderci.
Con il comando seguente creiamo un file vuoto da 1 GB
dd if=/dev/zero of=/swapfile1 bs=2048 count=524288
procediamo poi con
chown root:root /swapfile1
chmod 0600 /swapfile1
formattiamo ed attiviamo lo swap
mkswap /swapfile1
swapon /swapfile1
ed infine editiamo il file /etc/fstab
nano /etc/fstab
ed aggiungiamo
/swapfile1 none swap sw 0 0
A questo punto con il comando free -m di cui sopra, vederemo anche lo swap.
Con questa tecnica estendiamo ulteriormente una parte di memoria che permetterà alle nostre macchine di sopportare di più i carichi di lavoro.
Questa guida può essere usata su quelunque sistema, tra l’altro lo swap su file funzionerà molto bene se avete dischi SSD.
Lascia un commento