Introduzione
Uno dei modi più semplici per rendere il server più reattivo e proteggere dagli errori di memoria fuori dall’applicazione è aggiungere un certo spazio di swap. Lo swap è un’area su un’unità di archiviazione in cui il sistema operativo può memorizzare temporaneamente i dati che non possono più essere in memoria.
Questo ti dà la possibilità di aumentare la quantità di informazioni che il tuo server può mantenere nella sua memoria di lavoro, con alcuni avvertimenti. La lettura e la scrittura per lo scambio sono più bassi che l’utilizzo della memoria, ma può fornire una buona rete di sicurezza per quando il server è basso nella memoria.
Senza scambio, un server che esaurisce la memoria può iniziare ad uccidere applicazioni per liberare la memoria o addirittura a bloccarsi. Ciò può causare perdere dati non salvati o perdere tempo di inattività. Per garantire l’accesso affidabile ai dati, alcune applicazioni richiedono la funzionalità di swap.
In questa guida verranno illustrati come creare e abilitare un file di scambio in un server CentOS 7.
Prerequisiti
Prima di iniziare con questa guida, ci sono pochi passaggi che devono essere completati per la prima volta.
Avrete bisogno di un server CentOS 7 installato e configurato con un utente non radice che dispone di sudo
privilegi.
Una volta che si dispone del proprio utente non radice, è possibile utilizzarlo in SSH nel server CentOS e continuare con l’installazione del file di swap.
Controllare le informazioni di sistema per lo scambio
Prima di iniziare, dovremmo dare un’occhiata all’archivio del nostro server per vedere se disponiamo già di uno spazio di swap disponibile. Mentre possiamo avere più file di swap o partizioni swap, bisogna generalmente bastare.
Possiamo vedere se il sistema dispone di uno swap configurato utilizzando swapon
un utilità di scambio generale. Con la -s
bandiera, swapon
verrà visualizzato un riepilogo dell’uso e della disponibilità di swap sul nostro dispositivo di memorizzazione:
swapon -s
Se il comando non restituisce nulla, il riepilogo è vuoto e non esiste alcun file di scambio.
Un altro modo per controllare lo spazio di swap è con l’ free
utilità, che ci mostra l’utilizzo complessivo della memoria del sistema. Possiamo vedere la nostra attuale memoria e l’utilizzo di swap (in megabyte) digitando:
free -m
total used free shared buffers cached
Mem: 3953 315 3637 8 11 107
-/+ buffers/cache: 196 3756
Swap: 0 0 4095
Come potete vedere, lo spazio di swap totale nel sistema è 0. Questo corrisponde a quello che abbiamo visto swapon
.
Controllare lo spazio di archiviazione disponibile
Il modo tipico di allocare lo spazio per il swap è quello di utilizzare una partizione separata dedicata all’attività. Tuttavia, l’alterazione dello schema di partizione non è sempre possibile a causa di vincoli hardware o software. Fortunatamente, possiamo creare facilmente un file di scambio che risiede in una partizione esistente.
Prima di fare questo, dobbiamo essere consapevoli del nostro utilizzo corrente del drive. Possiamo ottenere queste informazioni digitando:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 59G 1.5G 55G 3% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 8.3M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
Nota: la -h
bandiera indica semplicemente dh
l’output delle informazioni sull’unità in un formato di lettura umana. Ad esempio, invece di fornire il numero totale di blocchi di memoria in una partizione, df -h
ci dirà l’utilizzo e la disponibilità dello spazio in M (per megabyte) o G (per gigabyte).
Come potete vedere nella prima riga, la nostra partizione di archiviazione dispone di 59 gigabyte disponibili, quindi abbiamo un bel po ‘di spazio per lavorare. Tieni presente che si tratta di un’istanza di VPS fresca e media, in modo che l’utilizzo effettivo potrebbe essere molto diverso.
Anche se ci sono molte opinioni circa la dimensione appropriata di uno spazio di swap, dipende in realtà dai requisiti applicativi e dalle tue preferenze personali. Generalmente, un importo uguale o doppio della quantità di memoria del sistema è un buon punto di partenza.
Dal momento che il mio sistema dispone di 4 gigabyte di memoria, e raddoppiando che richiederebbe un pezzo più grande del mio spazio di archiviazione rispetto a quello che voglio fare, creerò uno spazio di scambio di 4 gigabyte per corrispondere alla memoria del mio sistema.
Creare un file di scambio
Ora che conosciamo il nostro spazio di archiviazione disponibile, possiamo andare a creare un file di scambio all’interno del nostro filesystem. Creeremo un file chiamato swapfile
nella /
directory root ( ), sebbene tu possa nominare il file qualcos’altro se preferisci. Il file deve allocare la quantità di spazio che vogliamo per il nostro file di scambio.
Il modo più veloce e semplice per creare un file di scambio è quello di utilizzare fallocate
. Questo comando crea istantaneamente un file di una dimensione preallocata. Possiamo creare un file da 4 gigabyte digitando:
sudo fallocate -l 4G /swapfile
Dopo aver immesso la tua password per autorizzare i sudo
privilegi, il file di swap verrà creato quasi immediatamente e il prompt verrà restituito. Possiamo verificare che la quantità corretta di spazio sia riservata al swap utilizzando ls
:
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile
Come potete vedere, il nostro file di scambio è stato creato con la giusta quantità di spazio messo da parte.
Attiva un file di scambio
Adesso, il nostro file viene creato, ma il nostro sistema non sa che questo dovrebbe essere utilizzato per il swap. Dobbiamo dire al nostro sistema di formattare questo file come swap e quindi abilitarlo.
Prima di farlo, dovremmo modificare le autorizzazioni del nostro file di swap in modo che non sia leggibile da nessuno oltre all’account root. Permettere ad altri utenti di leggere o scrivere in questo file sarebbe un enorme rischio di sicurezza. Possiamo bloccare i permessi con chmod
:
sudo chmod 600 /swapfile
Ciò limita le autorizzazioni di lettura e scrittura solo all’account di root. Possiamo verificare che il file di swap abbia le autorizzazioni corrette utilizzando di ls -lh
nuovo:
ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile
Ora che il nostro file di swap è più sicuro, possiamo dire al nostro sistema di impostare lo spazio di swap da utilizzare digitando:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf
Il nostro file di swap è ora pronto per essere utilizzato come spazio di swap. Possiamo cominciare ad usarlo digitando:
sudo swapon /swapfile
Per verificare che la procedura sia riuscita, possiamo verificare se il nostro sistema ora riporta lo spazio di swap:
swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 0 -1
Questa uscita conferma che abbiamo un nuovo file di swap. Possiamo utilizzare free
nuovamente l’ utilità per corroborare i nostri risultati:
free -m
total used free shared buffers cached
Mem: 3953 315 3637 8 11 107
-/+ buffers/cache: 196 3756
Swap: 4095 0 4095
Il nostro swap è stato impostato con successo e il nostro sistema operativo comincerà ad usarlo se necessario.
Rendere permanente il file di scambio
Il nostro file di swap è attivo al momento, ma quando riavviamo, il server non abilita automaticamente il file da utilizzare. Possiamo modificarla modificando il fstab
file, che è una tabella che gestisce i filesystem e le partizioni.
Modificare il file con sudo
privilegi nell’editor di testo:
sudo nano /etc/fstab
Nella parte inferiore del file, è necessario aggiungere una riga che indicherà al sistema operativo di utilizzare automaticamente il file di swap creato:
/swapfile swap swap sw 0 0
Quando hai finito di aggiungere la riga, puoi salvare e chiudere il file. Il server verificherà questo file ad ogni avvio, quindi il file di swap sarà pronto per l’uso da adesso.
Tweak le impostazioni di swap (opzionale)
Ci sono alcune opzioni che puoi configurare che avranno un impatto sulle prestazioni del tuo sistema quando si tratta di swap. Queste configurazioni sono facoltative nella maggior parte dei casi e le modifiche apportate dipendono dalle esigenze dell’applicazione e dalle preferenze personali.
swappiness
Il swappiness
parametro determina quanto spesso il sistema scambia dati dalla memoria allo spazio di swap. Questo è un valore compreso tra 0 e 100 che rappresenta la percentuale di utilizzo della memoria che innesca l’utilizzo dello swap.
Con valori vicini a zero, il sistema non scambia i dati sull’unità a meno che non sia assolutamente necessario. Ricorda che le interazioni con il file di scambio sono “costose” in quanto sono molto più lente delle interazioni con la memoria e questa differenza nella velocità di lettura e scrittura può causare una notevole riduzione delle prestazioni di un’applicazione. Spiegare al sistema di non fare affidamento sullo swap tanto quanto generalmente renderà il sistema più veloce.
I valori che sono più vicini a 100 cercheranno di mettere più dati in swap nel tentativo di mantenere più memoria libera. A seconda del profilo di memoria delle applicazioni o di quello che utilizzi il server, potrebbe essere la scelta migliore in alcuni casi.
Possiamo vedere il valore swappiness corrente leggendo il swappiness
file di configurazione:
cat /proc/sys/vm/swappiness
30
CentOS 7 imposta un valore di swappiness di 30, che è un mezzo ideale per la maggior parte dei desktop e dei server locali. Per un sistema VPS, probabilmente vogliamo spostarlo più vicino a 0.
Possiamo impostare la swappiness ad un valore diverso utilizzando il sysctl
comando. Ad esempio, per impostare la swappiness su 10, è possibile digitare:
sudo sysctl vm.swappiness=10
vm.swappiness = 10
Questa impostazione persisterà fino al successivo riavvio. Per rendere persistente l’impostazione tra i riavvoti, possiamo aggiungere la linea inviata al nostro sysctl
file di configurazione:
sudo nano /etc/sysctl.conf
Aggiungere la tua impostazione di swappiness alla parte inferiore del file:
vm.swappiness = 10
Quando hai finito di aggiungere la riga, puoi salvare e chiudere il file. Il server installa automaticamente la swappiness al valore dichiarato in ogni avvio.
Pressione cache
Un altro valore correlato che si desidera modificare è il vfs_cache_pressure
. Questa impostazione influisce sulla memorizzazione di voci di metadati speciali del filesystem. Leggendo e rinfrescando costantemente queste informazioni sono generalmente molto costose, quindi la memorizzazione nella cache per più tempo è eccellente per le prestazioni del sistema.
È possibile visualizzare il valore corrente di questa pressione di cache richiamando proc
nuovamente il filesystem:
cat /proc/sys/vm/vfs_cache_pressure
100
Come è attualmente configurato, il nostro sistema elimina troppo in fretta le informazioni inode dalla cache. Possiamo impostare questa impostazione in un ambiente più conservatore, come 50, utilizzando sysctl
:
sudo sysctl vm.vfs_cache_pressure=50
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 di swappiness:
sudo nano /etc/sysctl.conf
Nella parte inferiore, aggiungere la riga che specifica il nuovo valore:
vm.vfs_cache_pressure = 50
Quando hai finito di aggiungere la riga, puoi salvare e chiudere il file. Il server imposta automaticamente la pressione della cache al valore dichiarato in ogni avvio.
Conclusione
Seguendo i passaggi riportati in questa guida, avrai dato al tuo server una stanza di respirazione in termini di utilizzo della memoria. Lo spazio di swap è incredibilmente utile per evitare alcuni problemi comuni.
Se si esegue errori OOM (fuori memoria) o se si accorge che il sistema non è in grado di utilizzare le applicazioni necessarie, la soluzione migliore è ottimizzare le configurazioni dell’applicazione o aggiornare il server. Tuttavia, la configurazione dello spazio di swap può darti maggiore flessibilità e può aiutare a comprare tempo su un server meno potente.