Devo disattivare completamente lo swap per il server web linux?


22

Recentemente il mio amico mi ha detto che è una buona idea disattivare lo scambio su server Web Linux con memoria sufficiente. Il mio server ha 12 GB e attualmente utilizza 4 GB (senza contare cache e buffer) sotto carico massimo.

Il suo argomento era che in una situazione normale il server non userà mai tutta la sua RAM, quindi l'unico modo in cui può incontrare la situazione OutOfMemory è a causa di alcuni bug / ddos ​​/ etc. Quindi, nel caso in cui lo swap sia disattivato, il sistema esaurirà la memoria che alla fine arresterà la memoria di registrazione del programma (molto probabilmente il processo del server Web) e probabilmente altri processi. In caso di swap è attivata suconsumerà sia RAM che swap e alla fine provocherà lo stesso crash, ma prima scaricherà processi cruciali come sshd da scambiare e inizierà a fare molte operazioni di swap con conseguente grande rallentamento. In questo modo, quando il sistema ddos ​​potrebbe andare in una condizione completamente inutilizzabile a causa di enormi ritardi e probabilmente non sarò in grado di accedere e interrompere il processo del server web o negare tutto il traffico in arrivo (tutti tranne ssh).

È giusto? Mi sto perdendo qualcosa (come il fatto che la partizione di swap sia molto utile in qualche modo anche se ho abbastanza RAM)? Dovrei spegnerlo?


6
Quindi, tutte le risposte si riducono alle affermazioni che 1. più memoria virtuale è incondizionatamente migliore di meno, e 2. ci deve essere qualche scambio abilitato perché è buono, nessuno dei quali è ben fondato.
NekojiruSou,

2
È errato pensare che lo swap sia esclusivamente destinato alla memoria di "riserva". Lo scambio è pensato per un posto dove mettere la memoria inutilizzata (così puoi usare la tua memoria effettiva in modo più efficiente). Dovresti sempre avere uno scambio. Se hai esaurito la memoria, allora hai esaurito la memoria - punto. Questo è un problema di gestione della capacità, non tendenza allo scambio. Ho una risposta piuttosto lunga serverfault.com/a/332205/75118 che cerca di spiegare meglio le intenzioni della memoria virtuale.
Matthew Ife,

Risposte:


27

Direi che dipende dal tuo caso d'uso e il resto delle risposte lo hanno trattato abbastanza bene. I 4G di swap sono in fin dei conti un modo economico per acquistare un po 'di sicurezza. E sento che questa economicità è ciò che sta facendo sì che le persone non vogliano spegnerlo.

Ma lasciami rispondere con una domanda retorica. Se il denaro non è un problema e hai una scelta tra due sistemi - uno con 12G di RAM e 4G di scambio, e un altro con 16G di RAM e nessuno scambio - quale sceglieresti? Sfortunatamente la maggior parte delle persone risponderebbe ancora che sceglierebbe 16G di RAM e aggiungerebbe ancora 4G di scambio, il che non mi interessa.

E in un'altra nota, trovo personalmente un sistema di scambio peggiore di un sistema in crash. Un sistema arrestato causerebbe l'attivazione di un server di backup in standby molto prima. E in una configurazione active-active (o load balanced) un sistema in crash verrebbe rimosso dalla rotazione molto prima. Una vittoria di nuovo per il sistema no-swap.


14

NON è consigliabile disattivare lo scambio anche se si dispone di memoria sufficiente. Se il tuo server ha bisogno di più memoria e non l'ha ricevuto, si bloccherà. Tuttavia, ciò può essere prevenuto (in una certa misura) quando si dispone di un'area di scambio.

Sì, le prestazioni del server diminuiranno quando si utilizza swap, ma almeno saranno operative e accessibili. Quindi, è possibile pianificare l'aggiunta di ulteriore memoria quando necessario se il server inizia a utilizzare lo scambio.

Ho trovato questa pagina che parla di swap. Dai un'occhiata alla terza sezione.

Invece di disattivare lo swap, puoi controllare lo swapiness .


1
Nella situazione che ho descritto consumerà sia swap che RAM e si bloccherà anche. Funziona da alcuni mesi e non ha mai usato più del 30% di memoria. Quindi è molto improbabile che salti al 100% così rapidamente durante il normale funzionamento. Quindi, se qualche processo impazzisce e consuma 8 GB, significa che consumerà tutta la memoria che il sistema operativo può ottenere, ciò significa tutto.
Poma,

@Poma, ci sono anche altri vantaggi dello swap. Inoltre, puoi consentire al sistema di vivere molto più a lungo quando hai uno scambio. Questo perché lo swap può essere più grande della memoria data la disponibilità di unità HD economiche.
Khaled,

6

No, non è una buona idea. "alcuni processi sono impazziti" significa che avresti già dovuto chiamare in modo proattivo

ulimit -d

prima o al momento della creazione del processo per impostare un limite per la memoria del segmento di dati di processo - E forse un limite al numero di thread

ulimit -T

per processo. ulimit è tuo amico. Si consiglia di leggere una delle guide di ottimizzazione della memoria prima di disattivare lo scambio. Puoi anche modificare i parametri del kernel in alcune cose per provare a gestire attacchi DOS o programmi errati.

Guardalo in questo modo: la memoria totale sul tuo sistema è RAM + swap. Se si dispone di 12 GB di swap, è sufficiente dimezzare la capacità della VM del sistema disabilitando lo swap. Cattiva idea. Questo non è un dibattito, in realtà, sta semplicemente leggendo ciò che altre persone hanno saputo da precedenti brutte esperienze da anni. È possibile che anche il tuo amico debba leggere un po '.


5

Come altri hanno già detto, puoi fermare efficacemente il tuo server usando swap tranne quando assolutamente necessario armeggiando con il parametro "swappiness". Questo controlla quanto aggressivamente il kernel cambierà le pagine di memoria.

Puoi vedere su cosa è attualmente impostato con:

cat /proc/sys/vm/swappiness

e puoi modificarlo "live" con (come root):

# echo "10" > /proc/sys/vm/swappiness

e per renderlo persistente, aggiungere quanto segue a /etc/sysctl.conf:

vm.swappiness=10

2

Un'altra cosa positiva che puoi fare è passare alla RAM usando zRAM. Penso che questa sia un'ottima idea! Per quanto riguarda le prestazioni, è come non avere affatto lo scambio, ma impedisce anche gli arresti anomali quando il sistema è molto carico!

Guarda questo:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

La mia esperienza: in questa macchina in cui sto scrivendo ora, ho disabilitato lo scambio, perché ho 4 GB di RAM (nel 2009 è stato molto!). Ho avuto solo un paio di problemi, uno di questi stava aprendo come 127 foto contemporaneamente per errore!

MA .. questa è una workstation e posso permettermi di riavviare se si blocca. In un server penso sia meglio avere swap e lo swap-in-RAM suona bene per me.


1

Come è già stato ampiamente chiarito, questa non è una buona idea. Se non altro, lo scambio ti dà un po 'di respiro per quando le cose non sono del tutto normali. Ad esempio, su un sistema che vedo, che normalmente ha solo pochi visitatori al giorno, si è verificato un forte aumento del traffico causato da una pagina menzionata in una rivista. Ciò ha comportato la prima volta che il server Web utilizzava lo spazio di swap da quando è stato messo in servizio. Senza quello spazio di scambio le cose non sarebbero andate molto bene.


0

Non è una buona idea. È possibile definire 2 file di scambio con priorità diversa. Uno più piccolo in uso e uno più grande che verrà utilizzato nel caso in cui il primo si riempia.

Inoltre vm.swappiness può aiutarti a controllare in modo aggressivo lo scambio del disco.


0

Se si inserisce uno 0 in vm.swappiness ciò non significa necessariamente che il sistema non cambierà. È un parametro per determinare la tendenza aggressiva di kerne a scambiare, ma non disattiva lo swap.

Ancora una volta, lo scambio non è male ma lo è il thrashing. Dai un'occhiata ai dati di sysstat e questo dovrebbe dare un buon puntatore su di essi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.