Introduzione
Un modo per proteggersi dagli errori di memoria esaurita nelle applicazioni è aggiungere un po’ di spazio di swap al tuo server. In questa guida, spiegheremo come aggiungere un file di swap a un server Ubuntu 22.04.
Cos’è lo Swap?
Lo Swap è una porzione di memoria di storage sull’hard disk che è stata riservata per far sì che il sistema operativo memorizzi temporaneamente i dati che non può più tenere in RAM. Ciò consente di aumentare la quantità di informazioni che il tuo server può mantenere nella sua memoria di lavoro, con alcune limitazioni. Lo spazio di swap sull’hard disk verrà utilizzato principalmente quando non vi è più spazio sufficiente nella RAM per contenere i dati dell’applicazione in uso.
Le informazioni scritte su disco saranno significativamente più lente rispetto alle informazioni conservate nella RAM, ma il sistema operativo preferirà mantenere i dati dell’applicazione in esecuzione in memoria e utilizzare lo swap per i dati più vecchi. Complessivamente, avere lo spazio di swap come ricorso quando la RAM del sistema è esaurita può essere una buona rete di sicurezza contro le eccezioni di memoria esaurita su sistemi con storage non SSD disponibile.
Passo 1 – Verifica del Sistema per le Informazioni di Swap
Prima di iniziare, possiamo verificare se il sistema ha già a disposizione uno spazio di swap. È possibile avere più file di swap o partizioni di swap, ma generalmente uno dovrebbe essere sufficiente.
Possiamo vedere se il sistema ha qualche swap configurato digitando:
Se non ricevi alcun output, significa che attualmente il tuo sistema non dispone di spazio di swap disponibile.
Puoi verificare che non ci sia swap attivo utilizzando l’utilità free
:
Output total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Come puoi vedere nella riga Swap dell’output, non c’è alcun swap attivo sul sistema.
Passo 2 – Verifica dello Spazio Disponibile sulla Partizione del Disco Rigido
Prima di creare il nostro file di swap, controlliamo l’attuale utilizzo del disco per assicurarci di avere abbastanza spazio. Fai questo inserendo:
OutputFilesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
Il dispositivo con /
nella colonna Montato su
è il nostro disco in questo caso. Abbiamo abbondanza di spazio disponibile in questo esempio (solo 1,4G usato). Il tuo utilizzo sarà probabilmente diverso.
Sebbene ci siano molte opinioni sulla dimensione appropriata dello spazio di swap, dipende davvero dalle tue preferenze personali e dai requisiti della tua applicazione. In generale, una quantità pari o doppia alla quantità di RAM sul tuo sistema è un buon punto di partenza. Un’altra buona regola pratica è che qualsiasi cosa oltre 4G di swap è probabilmente superflua se la stai utilizzando solo come fallback della RAM.
Passaggio 3 – Creazione di un file di swap
Ora che conosciamo lo spazio disponibile sull’hard disk, possiamo creare un file di swap sul nostro filesystem. Allocheremo un file della dimensione desiderata 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.
Dato che il server nel nostro esempio ha 1G di RAM, creeremo un file da 1G in questa guida. Regola questo valore per soddisfare le esigenze del tuo server:
Possiamo verificare che la quantità corretta di spazio sia stata riservata digitando:
Il nostro file è stato creato con la quantità corretta di spazio riservata.
Passaggio 4 – Abilitazione del file di swap
Ora che abbiamo un file della dimensione corretta disponibile, dobbiamo effettivamente trasformarlo in spazio di swap.
Per prima cosa, dobbiamo bloccare i permessi del file in modo che solo gli utenti con privilegi root possano leggerne il contenuto. Ciò impedisce agli utenti normali di accedere al file, il che avrebbe significative implicazioni per la sicurezza.
Rendi il file accessibile solo a root digitando:
Verifica il cambio dei permessi digitando:
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Come puoi vedere, solo l’utente root ha abilitati i flag di lettura e scrittura.
Ora possiamo segnare il file come spazio di swap digitando:
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Dopo aver segnato il file, possiamo abilitare il file di swap, consentendo al nostro sistema di iniziare a utilizzarlo:
Verifica che lo swap sia disponibile digitando:
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Possiamo controllare di nuovo l’output dell’utilità free
per corroborare le nostre conclusioni:
Output total used free shared buff/cache available
Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 1.0Gi 0B 1.0Gi
Il nostro swap è stato configurato con successo e il nostro sistema operativo inizierà a utilizzarlo secondo necessità.
Passaggio 5 – Rendere il File di Swap Permanente
Le nostre modifiche recenti 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
.
Esegui il backup del file /etc/fstab
nel caso qualcosa vada storto:
Aggiungi le informazioni sul file di swap alla fine del tuo file /etc/fstab
digitando:
Successivamente, esamineremo alcune impostazioni che possiamo aggiornare per ottimizzare lo spazio di swap.
Passaggio 6 – Ottimizzazione delle impostazioni di swap
Ci sono alcune opzioni che puoi configurare che avranno un impatto sulle prestazioni del sistema quando si tratta di swap.
Regolazione della proprietà Swappiness
Il parametro swappiness
configura quanto spesso il sistema scambia i dati dalla RAM allo spazio di swap. Questo è un valore compreso tra 0 e 100 che rappresenta una percentuale.
Con valori vicini a zero, il kernel non scambierà dati sul disco a meno che non sia assolutamente necessario. Ricorda, le interazioni con il file di swap sono “costose” perché richiedono molto più tempo rispetto alle interazioni con la RAM e possono causare una significativa riduzione delle prestazioni. Dire al sistema di non fare affidamento sullo swap renderà generalmente il sistema più veloce.
I valori più vicini a 100 cercheranno di mettere più dati nello swap nel tentativo di mantenere più spazio RAM libero. A seconda del profilo di memoria delle tue applicazioni o di ciò per cui stai usando il tuo server, questo potrebbe essere migliore in alcuni casi.
Possiamo vedere il valore di swappiness attuale digitando:
Output60
Per un desktop, un’impostazione di swappiness di 60 non è un valore male. Per un server, potresti volerlo spostare più vicino a 0.
Possiamo impostare il swappiness su un valore diverso utilizzando il comando sysctl
.
Ad esempio, per impostare il swappiness su 10, potremmo digitare:
Outputvm.swappiness = 10
Questa impostazione persiste fino al prossimo riavvio. Possiamo impostare questo valore automaticamente al riavvio aggiungendo la linea al nostro file /etc/sysctl.conf
:
In fondo, puoi aggiungere:
vm.swappiness=10
Salva e chiudi il file quando hai finito.
Regolazione dell’impostazione della pressione della cache
Un’altra valore correlato che potresti voler modificare è il vfs_cache_pressure
. Questa impostazione configura quanto il sistema sceglierà di memorizzare nella cache le informazioni di inode e dentry rispetto ad altri dati.
Fondamentalmente, queste sono informazioni di accesso al filesystem. Questo è generalmente molto costoso da cercare e richiesto molto frequentemente, quindi è una cosa eccellente per il tuo sistema memorizzare nella cache. Puoi vedere il valore attuale interrogando nuovamente il filesystem proc
:
Output100
Come è attualmente configurato, il nostro sistema rimuove le informazioni di inode dalla cache troppo rapidamente. Possiamo impostare questo su una impostazione più conservativa come 50 digitando:
Outputvm.vfs_cache_pressure = 50
Ancora, ciò è valido solo per la nostra sessione attuale. Possiamo cambiarlo aggiungendolo al nostro file di configurazione come abbiamo fatto con il nostro parametro di swappiness:
In fondo, aggiungi la riga che specifica il tuo nuovo valore:
vm.vfs_cache_pressure=50
Salva e chiudi il file quando hai finito.
Conclusione
Seguendo i passaggi in questa guida otterrai un po’ di spazio respirabile nei casi che altrimenti porterebbero a eccezioni di memoria esaurita. Lo spazio di swap può essere incredibilmente utile per evitare alcuni di questi problemi comuni.
Se ti trovi di fronte a errori di OOM (memoria esaurita), o se scopri che il tuo sistema non riesce a utilizzare le applicazioni di cui hai bisogno, la soluzione migliore è ottimizzare le configurazioni delle tue applicazioni o aggiornare il tuo server.
Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04