Swap è uno spazio su un disco che viene utilizzato quando la quantità di memoria RAM fisica è piena. Quando un sistema Linux esaurisce la RAM, le pagine inattive vengono spostate dalla RAM allo spazio di scambio.
Lo spazio di scambio può assumere la forma di una partizione di scambio dedicata o di un file di scambio. In genere, quando si esegue Ubuntu su una macchina virtuale, non è presente una partizione di scambio e l'unica opzione è creare un file di scambio.
Questo tutorial spiega come aggiungere un file di scambio su Ubuntu 20.04.
Prima di iniziare #
Lo scambio non dovrebbe essere visto come un sostituto della memoria fisica. Poiché lo spazio di scambio è una sezione del disco rigido, ha un tempo di accesso più lento rispetto alla memoria fisica. Se il tuo sistema esaurisce costantemente la memoria, dovresti aggiungere più RAM.
In genere, la dimensione del file di scambio dipende dalla quantità di RAM del tuo sistema:
- Sistemi con meno di 2 GB di RAM - 2 volte la quantità di RAM.
- Sistemi con da 2 a 8 GB di RAM - la stessa dimensione della quantità di RAM.
- Sistemi con più di 8 GB di RAM - almeno 4 GB di Swap.
Solo l'utente root o con privilegi sudo può attivare il file di scambio.
Creazione di un file di scambio #
In questo esempio creeremo 2 GB
file di scambio. Se vuoi aggiungere più swap, sostituisci 2G
con le dimensioni dello spazio di scambio di cui hai bisogno.
Completa i passaggi seguenti per aggiungere spazio di scambio su Ubuntu 20.04:
-
Innanzitutto, crea un file che verrà utilizzato come scambio:
sudo fallocate -l 2G /swapfile
Se il
fallocate
l'utilità non è presente sul tuo sistema, oppure viene visualizzato un messaggio di errore che dicefallocate failed: Operation not supported
, usa il seguente comando per creare il file di scambio:sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
-
Imposta i permessi del file su
600
per impedire agli utenti regolari di scrivere e leggere il file:sudo chmod 600 /swapfile
-
Crea un'area di scambio Linux sul file:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=fde7d2c8-06ea-400a-9027-fd731d8ab4c8
-
Attiva il file di scambio eseguendo il comando seguente:
sudo swapon /swapfile
Per rendere permanente la modifica, apri il
/etc/fstab
file:sudo nano /etc/fstab
e incolla la seguente riga:
/etc/fstab/swapfile swap swap defaults 0 0
-
Verifica che lo scambio sia attivo utilizzando lo
swapon
o ilfree
comando, come mostrato di seguito:sudo swapon --show
NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -1
sudo free -h
total used free shared buff/cache available Mem: 981Mi 97Mi 68Mi 0.0Ki 814Mi 735Mi Swap: 2.0Gi 10Mi 1.9Gi
Regolazione del valore di scambio #
Swappiness è una proprietà del kernel Linux che definisce la frequenza con cui il sistema utilizzerà lo spazio di scambio. Può avere un valore compreso tra 0 e 100. Un valore basso farà sì che il kernel cerchi di evitare lo scambio quando possibile, mentre un valore più alto farà sì che il kernel utilizzi lo spazio di scambio in modo più aggressivo.
Su Ubuntu, il valore di swappiness predefinito è impostato su 60
. Puoi controllare il valore corrente digitando il seguente comando:
cat /proc/sys/vm/swappiness
60
Mentre il valore di swappiness di 60
va bene per la maggior parte dei sistemi Linux, per i server di produzione potrebbe essere necessario impostare un valore inferiore.
Ad esempio, per impostare il valore di swappiness su 10
, esegui:
sudo sysctl vm.swappiness=10
Per rendere questo parametro persistente tra i riavvii, aggiungi la seguente riga a /etc/sysctl.conf
file:
vm.swappiness=10
Il valore di swappiness ottimale dipende dal carico di lavoro del sistema e da come viene utilizzata la memoria. Dovresti regolare questo parametro con piccoli incrementi per trovare un valore ottimale.
Rimozione di un file di scambio #
Per disattivare ed eliminare il file di scambio, procedi nel seguente modo:
-
Innanzitutto, disattiva lo spazio di scambio:
sudo swapoff -v /swapfile
-
Quindi, rimuovi la voce del file di scambio
/swapfile swap swap defaults 0 0
dal/etc/fstab
file. -
Infine, rimuovi il file di scambio effettivo usando
rm
comando:sudo rm /swapfile