Una versione precedente di questo tutorial è stata scritta da Justin Ellingwood
- Introduzione
- Che cos’è lo Swap?
- Passo 1 – Controllare il sistema per informazioni di swap
- Passo 2 – Controllare lo spazio disponibile sulla partizione del disco rigido
- Fase 3 – Creare un file di swap
- Passo 4 – Abilitare il file di swap
- Passo 5 – Rendere il file di swap permanente
- Step 6 – Messa a punto delle impostazioni di swap
- Regolazione della proprietà Swappiness
- Regolazione della pressione della cache
- Conclusione
Introduzione
Uno dei modi più semplici per proteggersi dagli errori di out-of-memory nelle applicazioni è quello di aggiungere dello spazio di swap al vostro server. In questa guida, spiegheremo come aggiungere un file di swap a un server Ubuntu 18.04.
Attenzione: Anche se lo swap è generalmente raccomandato per sistemi che utilizzano dischi rigidi tradizionali, l’uso di swap con SSD può causare problemi di degrado dell’hardware nel tempo. A causa di questa considerazione, non consigliamo di abilitare lo swap su DigitalOcean o su qualsiasi altro provider che utilizza lo storage SSD. Farlo può avere un impatto sull’affidabilità dell’hardware sottostante per voi e per i vostri vicini. Questa guida è fornita come riferimento per gli utenti che possono avere sistemi a disco rotante altrove.
Se avete bisogno di migliorare le prestazioni del vostro server su DigitalOcean, si consiglia di aggiornare il vostro Droplet. Questo porterà a risultati migliori in generale e diminuirà la probabilità di contribuire a problemi hardware che possono influenzare il tuo servizio.
Che cos’è lo Swap?
Lo Swap è un’area su un disco rigido che è stata designata come un posto dove il sistema operativo può memorizzare temporaneamente i dati che non può più tenere nella RAM. Fondamentalmente, questo vi dà la possibilità di aumentare la quantità di informazioni che il vostro server può tenere nella sua “memoria” di lavoro, con alcune avvertenze. Lo spazio di swap sul disco rigido sarà utilizzato principalmente quando non c’è più spazio sufficiente nella RAM per contenere i dati delle applicazioni in uso.
Le informazioni scritte su disco saranno significativamente più lente delle informazioni conservate nella RAM, ma il sistema operativo preferirà mantenere i dati delle applicazioni in esecuzione in memoria e utilizzare lo swap per i dati più vecchi. Nel complesso, avere spazio di swap come ripiego per quando la RAM del sistema è esaurita può essere una buona rete di sicurezza contro le eccezioni di out-of-memory su sistemi con memoria non SSD disponibile.
Passo 1 – Controllare il sistema per informazioni di swap
Prima di iniziare, possiamo controllare se il sistema ha già dello spazio di swap disponibile. È possibile avere più file di swap o partizioni di swap, ma generalmente uno dovrebbe essere sufficiente.
Possiamo vedere se il sistema ha dello swap configurato digitando:
- sudo swapon --show
Se non si ottiene alcun risultato, significa che il sistema non ha spazio di swap disponibile al momento.
Puoi verificare che non ci sia uno swap attivo usando l’utilità free
:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 222M 680K 678M 721MSwap: 0B 0B 0B
Come puoi vedere nella riga Swap dell’output, nessun swap è attivo sul sistema.
Passo 2 – Controllare lo spazio disponibile sulla partizione del disco rigido
Prima di creare il nostro file di swap, controlleremo il nostro utilizzo attuale del disco per essere sicuri di avere abbastanza spazio. Fatelo inserendo:
- df -h
OutputFilesystem Size Used Avail Use% Mounted onudev 481M 0 481M 0% /devtmpfs 99M 656K 98M 1% /run/dev/vda1 25G 1.4G 23G 6% /tmpfs 493M 0 493M 0% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 493M 0 493M 0% /sys/fs/cgroup/dev/vda15 105M 3.4M 102M 4% /boot/efitmpfs 99M 0 99M 0% /run/user/1000
Il dispositivo con /
nella colonna Mounted on
è il nostro disco in questo caso. Abbiamo molto spazio disponibile in questo esempio (solo 1,4G usato). Il tuo utilizzo sarà probabilmente diverso.
Anche se ci sono molte opinioni sulla dimensione appropriata di uno spazio di swap, dipende davvero dalle tue preferenze personali e dai requisiti della tua applicazione. Generalmente, una quantità pari o doppia alla quantità di RAM sul vostro sistema è un buon punto di partenza. Un’altra buona regola empirica è che qualsiasi cosa oltre i 4G di swap è probabilmente inutile se la stai usando solo come ripiego per la RAM.
Fase 3 – Creare un file di swap
Ora che conosciamo lo spazio disponibile sul disco rigido, possiamo creare un file di swap sul nostro filesystem. Alloccheremo un file della dimensione di swap che vogliamo chiamato swapfile
nella nostra directory root (/).
Il modo migliore per creare un file di swap è con il programma fallocate
. Questo comando crea istantaneamente un file della dimensione specificata.
Siccome il server nel nostro esempio ha 1G di RAM, creeremo un file da 1G in questa guida. Regola questo per soddisfare le esigenze del tuo server:
- sudo fallocate -l 1G /swapfile
Possiamo verificare che la corretta quantità di spazio è stata riservata digitando:
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Il nostro file è stato creato con la corretta quantità di spazio messo da parte.
Passo 4 – Abilitare il file di swap
Ora che abbiamo un file della dimensione corretta disponibile, dobbiamo effettivamente trasformarlo in spazio di swap.
Prima di tutto, dobbiamo bloccare i permessi del file in modo che solo gli utenti con privilegi di root possano leggerne il contenuto. Questo impedisce agli utenti normali di essere in grado di accedere al file, il che avrebbe implicazioni significative per la sicurezza.
Rendere il file accessibile solo a root digitando:
- sudo chmod 600 /swapfile
Verificare il cambiamento dei permessi digitando:
- ls -lh /swapfile
Output -rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Come potete vedere, solo l’utente root ha i flag di lettura e scrittura abilitati.
Possiamo ora marcare il file come spazio di swap digitando:
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Dopo aver marcato il file, possiamo abilitare il file di swap, permettendo al nostro sistema di iniziare ad utilizzarlo:
- sudo swapon /swapfile
Verificare che lo swap sia disponibile digitando:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO/swapfile file 1024M 0B -2
Possiamo controllare di nuovo l’output dell’utilità free
per confermare le nostre scoperte:
- free -h
Output total used free shared buff/cache availableMem: 985M 84M 220M 680K 680M 722MSwap: 1.0G 0B 1.0G
Il nostro swap è stato impostato con successo e il nostro sistema operativo inizierà a usarlo come necessario.
Passo 5 – Rendere il file di swap permanente
I nostri recenti cambiamenti hanno abilitato il file di swap per la sessione corrente. Tuttavia, se riavviamo, il server non manterrà automaticamente le impostazioni di swap. Possiamo cambiare questo aggiungendo il file di swap al nostro file /etc/fstab
.
Fate un backup del file /etc/fstab
nel caso qualcosa vada storto:
- sudo cp /etc/fstab /etc/fstab.bak
Aggiungi le informazioni del file di swap alla fine del tuo file /etc/fstab
digitando:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Prossimo vedremo alcune impostazioni che possiamo aggiornare per regolare il nostro spazio di swap.
Step 6 – Messa a punto delle impostazioni di swap
Ci sono alcune opzioni che puoi configurare che avranno un impatto sulle prestazioni del tuo sistema quando si tratta di swap.
Regolazione della proprietà Swappiness
Il parametro swappiness
configura quanto spesso il tuo sistema scambia dati dalla RAM allo spazio swap. Questo è un valore tra 0 e 100 che rappresenta una percentuale.
Con valori vicini allo zero, il kernel non scambierà dati sul disco a meno che non sia assolutamente necessario. Ricordate, le interazioni con il file di swap sono “costose” nel senso che richiedono molto più tempo delle interazioni con la RAM e possono causare una significativa riduzione delle prestazioni. Dire al sistema di non fare molto affidamento sullo swap generalmente renderà il vostro sistema più veloce.
Valori che sono più vicini a 100 cercheranno di mettere più dati nello swap nel tentativo di mantenere più spazio libero nella RAM. A seconda del profilo di memoria delle vostre applicazioni o per cosa state usando il vostro server, questo potrebbe essere meglio in alcuni casi.
Possiamo vedere il valore corrente di swappiness digitando:
- cat /proc/sys/vm/swappiness
Output60
Per un desktop, un’impostazione di swappiness di 60 non è un cattivo valore. Per un server, potresti volerlo spostare più vicino a 0.
Possiamo impostare lo swappiness su un valore diverso usando il comando sysctl
.
Per esempio, per impostare lo swappiness a 10, potremmo scrivere:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Questa impostazione persisterà fino al prossimo riavvio. Possiamo impostare questo valore automaticamente al riavvio aggiungendo la linea al nostro file /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
In fondo, puoi aggiungere:
vm.swappiness=10
Salva e chiudi il file quando hai finito.
Regolazione della pressione della cache
Un altro valore relativo che potresti voler modificare è il vfs_cache_pressure
. Questa impostazione configura quanto il sistema sceglierà di mettere in cache le informazioni di inode e dentry rispetto ad altri dati.
Fondamentalmente, questi sono dati di accesso al filesystem. Questo è generalmente molto costoso da cercare e richiesto molto frequentemente, quindi è un’ottima cosa per il vostro sistema da mettere in cache. Puoi vedere il valore attuale interrogando di nuovo il filesystem proc
:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
Come è configurato attualmente, il nostro sistema rimuove le informazioni sugli inode dalla cache troppo velocemente. Possiamo impostarlo su un’impostazione più conservativa come 50 digitando:
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Ancora una volta, questo è valido solo per la nostra sessione corrente. Possiamo cambiarlo aggiungendolo al nostro file di configurazione come abbiamo fatto con la nostra impostazione di swappiness:
- sudo nano /etc/sysctl.conf
In fondo, aggiungere la linea che specifica il nuovo valore:
vm.vfs_cache_pressure=50
Salva e chiudi il file quando hai finito.
Conclusione
Seguire i passi di questa guida ti darà un po’ di respiro in casi che altrimenti porterebbero ad eccezioni di out-of-memory. Lo spazio di swap può essere incredibilmente utile per evitare alcuni di questi problemi comuni.
Se vi imbattete in errori OOM (out of memory), o se trovate che il vostro sistema non è in grado di utilizzare le applicazioni di cui avete bisogno, la soluzione migliore è quella di ottimizzare le configurazioni delle applicazioni o aggiornare il vostro server.