Come configurare la memoria virtuale su una VPS (SWAP)

Questo articolo tratterà pro e contro dell’utilizzo della memoria virtuale, o del relativo file di swap (paging o paginazione della memoria virtuale), determinando:

  • se la tua VPS utilizza o meno la memoria virtuale;
  • le differenze tra una partizione di swap e un file di swap
  • dandovi informazioni su come creare un file di scambio e come configurare la memoria virtuale del sistema.

Swap e memoria virtuale, in effetti, sono due caratteristiche poco note e molto utili per configurare al meglio il nostro sito: con la memoria virtuale, infatti, il sistema sarà in grado di sopperire alla mancanza di RAM sfruttando una parte di spazio su disco. Stando alla teoria, inoltre, il cosiddetto paging risponde esattamente a questo requisito, impostando dei requisiti per uno scambio veloce ed efficiente.

Lo swap è una caratteristica sfruttabile anche a livello di siti web, in quanto i siti con alto utilizzo di RAM tendono a cadere facilmente, o comunque a rallentare i tempi di caricamento delle pagine. In particolare questa caratteristica dello swap viene molto usata sugli hosting con hard disk in SSD.

Immaginiamo di avere un VPS con (ad esempio) 512MB di RAM a disposizione, e sistema operativo Debian. All’interno della finestra del terminale SSH avremo a disposizione vari task e vari processi attivi, che occuperanno memoria variabile in base ai rispettivi requisiti.  Sui server in produzione, cioè quelli relativi a siti web già online che girino su hosting VPS, tipicamente la memoria virtuale non è attiva, e deve essere impostata adeguatamente.

In questo modo non saremo costretti, compatibilmente non lo spazio a disposizione sul server, ad estendere la memoria RAM passando a piani VPS più costosi.

Requisiti

Per effettuare queste operazioni vi serviranno:

  1. un terminale di comando o PuTTY;
  2. accesso root via SSH al sito;
  3. i comandi da terminale free, swapon, swapoff, dd, mkswap

La memoria virtuale in realtà potrebbe essere stata già configurata, ma in questa guida vedremo come impostarla o reimpostarla a dovere. La regola empirica generale è quella di dimensionare lo swap fino a 2 volte la dimensione della RAM disponibile: ad esempio, se avete un VPS con 512MB di RAM, potete impostare lo swap con altri 512MB minimo e 1.5GB al massimo, per un totale di memoria a disposizione di 1 GB minimo e di 2 GB al massimo.

Vantaggi e svantaggi dello swap su VPS Linux

Se usate le droplet di DigitalOcean, cosa che faccio anch’io ad esempio, sono con hard disk SSD e non soffrono particolarmente di problemi di lentezza lato server. In alcuni casi, pero’, ad esempio su un sito configurato con NGINX, l’uso di RAM era molto più alto di quello di un server Apache, e quindi la configurazione dello swap era indispensabile per evitare l’insorgere (ad esempio) di rallentamenti sul sito oppure errori 500 e/o 530.

Vantaggi

  • Maggiore memoria disponibile per il sito, il che si traduce in prestazioni “mediamente” migliori
  • evitare problemi di stack overflow o di out of memory;
  • velocizzare i tempi di caricamento delle pagine web ed il TTFB

Svantaggi

  • Problemi nella gestione del disco fisso che tende a ridursi lato web (ad es. /var/www/html)
  • Errori di configurazione che possono compromettere il funzionamento del sito, ad esempio per imperizia dell’operatore.

Procedura passo-passo: verificare lo spazio a disposizione

Come prima cosa, da terminale di comando lanciate il comando:

free

per verificare la memoria disponibile. Vedrete una tabella testuale con l’indicazione della memoria totale (total), di quella usata (used), di quella libera (free), del buffer (buffers) e della cache (cached). Questo si ripeterà per tutte le partizioni disponibili, al limite solo per l’unica che avete a disposizione.

Se è abilitata vedremo una cosa del genere:

             total       used       free     shared    buffers     cached
Mem:        361996     360392       1604          0       1988      54376
-/+ buffers/cache:     304028      57968
Swap:       249896          0     249896

Se non lo è, free restituirà qualcosa del genere:

             total       used       free     shared    buffers     cached
Mem:        361996     360392       1604          0       2320      54444
-/+ buffers/cache:     303628      58368
Swap:            0          0          0

Potete anche vedere solo lo swap usando il comando alternativo:

free | grep Swap

Creare il file di swap

Usate il comando df -h per vedere le informazioni sul disco della VPS. Il file di swap dovrebbe essere inserito in /var come ad esempio swap.img (che sarà il file della memoria virtuale gestito dal sistema). Quindi entriamo in /var, creiamo un file swap e lo impostiamo con permessi chmod a 600 per motivi di sicurezza.

cd /var
touch swap.img
chmod 600 swap.img

Dimensionare il file di swap

Come abbiamo scritto prima, se avete 0.5G di RAM fisica a disposizione, potete impostare la dimensione del file di swap fino a circa 1.5GB / 2.0GB. Ovviamente dovrete assicurarvi di avere a disposizione tale spazio sul disco, cosa che potete fare pulendo i file temporanei da ogni cartella, riducendo plugin installati, theme inutili, la dimensione delle immagini di WordPress e così via.

Sulle droplet di DigitalOcean può essere opportuno dimensionare il file con tutti zeri:

dd if=/dev/zero of=/var/swap.img bs=1024k count=1000

Inizializzare il disco

Impostiamo la memoria virtuale ad 1 GB (come scritto al passaggio precedente):

mkswap /var/swap.img

In alternativa potete sfruttare fallocate (dopo averlo installato con ccc) per indicare direttamente la dimensione desiderata dello swap.

sudo fallocate -l 1G /swapfile

Abilitare lo swap

Per abilitare lo swap

swapon /var/swap.img

Per disbailitarlo:

swapoff /var/swap.img

Potete verificare che lo swap sia attivo dando di nuovo il comando free.

Abilitare lo swap in automatico

Quello che bisogna fare come ultimo passaggio, è aggiungere una riga al file /etc/fstab per abilitare la cosa.

Attenzione che questa operazione va effettuata con molta attenzione, per cui leggete un po’ di documentazione su fstab prima di procedere.

Il comando è questo, in genere:

echo "/var/swap.img    none    swap    sw    0    0" >> /etc/fstab
0 voti