Ricerca nel sito web

Come aggiungere spazio di swap su Debian 11


introduzione

Un modo per proteggersi dagli errori di memoria insufficiente nelle applicazioni consiste nell'aggiungere spazio di swap al proprio server. In questa guida, tratteremo come aggiungere un file di scambio a un server Debian 11.

Che cos'è lo scambio?

Swap è una porzione di memoria del disco rigido che è stata riservata al sistema operativo per archiviare temporaneamente i dati che non può più contenere nella RAM. Ciò ti consente di aumentare la quantità di informazioni che il tuo server può conservare nella sua memoria di lavoro, con alcuni avvertimenti. Lo spazio di scambio sul disco rigido verrà utilizzato principalmente quando non c'è più spazio sufficiente nella RAM per contenere i dati dell'applicazione in uso.

Le informazioni scritte su disco saranno significativamente più lente delle informazioni conservate nella RAM, ma il sistema operativo preferirà continuare a eseguire i dati dell'applicazione in memoria e utilizzare lo scambio per i dati meno recenti. Nel complesso, avere uno spazio di scambio come ripiego per quando la RAM del sistema è esaurita può essere una buona rete di sicurezza contro le eccezioni di memoria insufficiente su sistemi con spazio di archiviazione non SSD disponibile.

Passaggio 1: controllo del sistema per informazioni sullo scambio

Prima di iniziare, possiamo verificare se il sistema dispone già di spazio di swap disponibile. È possibile avere più file di scambio o partizioni di scambio, ma generalmente uno dovrebbe essere sufficiente.

Possiamo vedere se il sistema ha uno swap configurato digitando:

  1. sudo swapon --show

Se non ricevi alcun output, significa che il tuo sistema non ha spazio di swap disponibile al momento.

Puoi verificare che non ci sia uno scambio attivo usando l'utility free:

  1. free -h
Output
total used free shared buff/cache available Mem: 976Mi 75Mi 623Mi 0.0Ki 276Mi 765Mi Swap: 0B 0B 0B

Come puoi vedere nella riga Swap dell'output, nessuno scambio è attivo sul sistema.

Passaggio 2: controllo dello spazio disponibile sulla partizione del disco rigido

Prima di creare il nostro file di scambio, controlleremo il nostro attuale utilizzo del disco per assicurarci di avere spazio sufficiente. Fai questo inserendo:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 472M 0 472M 0% /dev tmpfs 98M 500K 98M 1% /run /dev/vda1 25G 1.1G 23G 5% / tmpfs 489M 0 489M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 124M 5.9M 118M 5% /boot/efi tmpfs 98M 0 98M 0% /run/user/0

Il dispositivo con nella colonna Montato su è il nostro disco in questo caso. Abbiamo molto spazio disponibile in questo esempio (solo 1.4G utilizzato). Il tuo utilizzo sarà probabilmente diverso.

Sebbene ci siano molte opinioni sulla dimensione appropriata di uno spazio di swap, dipende davvero dalle tue preferenze personali e dai requisiti dell'applicazione. In genere, una quantità pari o doppia alla quantità di RAM del sistema è un buon punto di partenza. Un'altra buona regola empirica è che qualsiasi cosa oltre 4G di swap non è probabilmente necessaria se la si utilizza solo come riserva di RAM.

Passaggio 3: creazione di un file di scambio

Ora che conosciamo lo spazio disponibile sul disco rigido, possiamo creare un file di scambio sul nostro filesystem. Allocheremo un file della dimensione che vogliamo chiamare swapfile nella nostra directory root (/).

Il modo migliore per creare un file di scambio è con il programma fallocate. Questo comando crea istantaneamente un file della dimensione specificata.

Poiché il server nel nostro esempio ha 1G di RAM, in questa guida creeremo un file da 1G. Regola questo per soddisfare le esigenze del tuo server:

  1. sudo fallocate -l 1G /swapfile

Possiamo verificare che sia stata riservata la corretta quantità di spazio digitando:

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Aug 23 11:14 /swapfile

Il nostro file è stato creato con la giusta quantità di spazio riservato.

Passaggio 4: abilitazione del file di scambio

Ora che abbiamo a disposizione un file della dimensione corretta, dobbiamo effettivamente trasformarlo in uno spazio di swap.

Innanzitutto, dobbiamo bloccare i permessi del file in modo che solo gli utenti con privilegi di root possano leggerne il contenuto. Ciò impedisce agli utenti normali di accedere al file, il che avrebbe implicazioni significative per la sicurezza.

Rendi il file accessibile solo a root digitando:

  1. sudo chmod 600 /swapfile

Verifica la modifica delle autorizzazioni digitando:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Aug 23 11:14 /swapfile

Come puoi vedere, solo l'utente root ha i flag di lettura e scrittura abilitati.

Ora possiamo contrassegnare il file come spazio di swap digitando:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Dopo aver contrassegnato il file, possiamo abilitare il file di scambio, consentendo al nostro sistema di iniziare a usarlo:

  1. sudo swapon /swapfile

Verifica che lo scambio sia disponibile digitando:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

Possiamo controllare nuovamente l'output dell'utility free per confermare i nostri risultati:

  1. free -h
Output
total used free shared buff/cache available Mem: 976Mi 85Mi 612Mi 0.0Ki 279Mi 756Mi Swap: 1.0Gi 0B 1.0Gi

Il nostro scambio è stato configurato correttamente e il nostro sistema operativo inizierà a utilizzarlo secondo necessità.

Passaggio 5: rendere permanente il file di scambio

Le nostre recenti modifiche hanno abilitato il file di scambio per la sessione corrente. Tuttavia, se riavviamo, il server non manterrà automaticamente le impostazioni di scambio. Possiamo cambiarlo aggiungendo il file di scambio al nostro file /etc/fstab.

Eseguire il backup del file /etc/fstab nel caso qualcosa vada storto:

  1. sudo cp /etc/fstab /etc/fstab.bak

Aggiungi le informazioni del file di scambio alla fine del tuo file /etc/fstab digitando:

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Successivamente esamineremo alcune impostazioni che possiamo aggiornare per ottimizzare il nostro spazio di scambio.

Passaggio 6: ottimizzazione delle impostazioni di scambio

Ci sono alcune opzioni che puoi configurare che avranno un impatto sulle prestazioni del tuo sistema quando si ha a che fare con lo scambio.

Regolazione della proprietà Swappiness

Il parametro swappiness configura la frequenza con cui il tuo sistema scambia i dati dalla RAM allo spazio di swap. Questo è un valore compreso tra 0 e 100 che rappresenta una percentuale.

Con valori prossimi allo zero, il kernel non scambierà i dati sul disco a meno che non sia assolutamente necessario. Ricorda, le interazioni con il file di scambio sono costose in quanto 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 scambio generalmente renderà il tuo sistema più veloce.

I valori più vicini a 100 cercheranno di inserire più dati nello scambio nel tentativo di mantenere più spazio libero nella RAM. A seconda del profilo di memoria delle tue applicazioni o per cosa stai usando il tuo server, questo potrebbe essere migliore in alcuni casi.

Possiamo vedere l'attuale valore di swappiness digitando:

  1. cat /proc/sys/vm/swappiness
Output
60

Per un desktop, un'impostazione di swappiness di 60 non è un valore negativo. Per un server, potresti volerlo spostare più vicino a 0.

Possiamo impostare lo swappiness su un valore diverso usando il comando sysctl.

Ad esempio, per impostare lo swappiness su 10, potremmo digitare:

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

Questa impostazione persisterà fino al prossimo riavvio. Possiamo impostare questo valore automaticamente al riavvio aggiungendo la riga al nostro file /etc/sysctl.conf:

  1. sudo nano /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 altro valore correlato che potresti voler modificare è vfs_cache_pressure. Questa impostazione configura quanto il sistema sceglierà di memorizzare nella cache le informazioni inode e dentry rispetto ad altri dati.

Fondamentalmente, si tratta di dati di accesso sul filesystem. Questo è generalmente molto costoso da cercare e richiesto molto frequentemente, quindi è una cosa eccellente per il tuo sistema da memorizzare nella cache. Puoi vedere il valore corrente interrogando nuovamente il filesystem proc:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

Poiché è attualmente configurato, il nostro sistema rimuove le informazioni inode dalla cache troppo rapidamente. Possiamo impostarlo su un'impostazione più conservativa come 50 digitando:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.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 swappiness:

  1. sudo nano /etc/sysctl.conf

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

Seguire i passaggi di questa guida ti darà un po' di respiro nei casi che altrimenti porterebbero a eccezioni di memoria insufficiente. Lo spazio di scambio può essere incredibilmente utile per evitare alcuni di questi problemi comuni.

Se si riscontrano errori di memoria insufficiente o se si scopre che il sistema non è in grado di utilizzare le applicazioni necessarie, la soluzione migliore è ottimizzare le configurazioni delle applicazioni o aggiornare il server.