Abbiamo bisogno della partizione di swap su un server LAMP?


14

Dobbiamo effettivamente scambiare la partizione sul server Ubuntu con LAMP? Penso di non averne bisogno, ma è meglio sapere con certezza se non causerà un comportamento non previsto.
In realtà i miei pensieri erano:

  • Il server non va mai in letargo
  • Se si sta scambiando, è necessario pensare al bilanciamento del carico / al traffic shaping, ecc ...

Ho ragione, posso disattivare lo swap per il server di produzione?

Grazie!

Risposte:


14

Ho ragione, posso disattivare lo swap per il server di produzione?

No. Avere sempre un po 'di spazio di scambio.

Ho provato a eseguire un server di produzione senza scambio una volta e circa una settimana dopo, dopo un aggiornamento di Wordpress, PHP ha iniziato a consumare molta più RAM di quanto avessimo considerato. Quando esaurisci la RAM e hai abilitato lo scambio, le cose rallentano (a volte molto, a volte solo un po ', a seconda di cosa viene inserito) ma sei in grado di accedere, trovare il problema e provare a risolvere esso.

Quando esaurisci la RAM e non hai swap, i processi muoiono, le cose si bloccano e per la maggior parte del tempo la tua unica opzione è un riavvio. Ma fino a quando non eseguirai il riavvio, le cose probabilmente si romperanno.

Nel mio mondo, rotto è molto peggio che lento.

Naturalmente se si trova il sistema è costantemente utilizza grandi porzioni di swap (che sarà molto spesso usare un po ' come un modo di muoversi fuori roba vecchia nella cache), si ha ovviamente un problema ( "inserto RAM per favore"), ma avendo come una rete di sicurezza è decisamente consigliata.


In risposta al commento di SpamapS:

Nel mondo dei "siti Web di successo", sono presenti hot failover, bilanciamento del carico e altri strumenti che consentono a una macchina di esplodere e che non hanno alcun effetto sul resto del sito. Ma questo richiede molti soldi. Avere hardware ridondante non è economico per la maggior parte dei siti, anche se fanno soldi.

Non sono completamente d'accordo con il tuo commento sui tempi di attività. In una configurazione di e-commerce tradizionale se le persone non possono vedere il tuo sito, non possono acquistare da te. Questo non è solo e-commerce, tutti gli interessi commerciali online hanno molto più difetti se sei inattivo per qualsiasi tipo di periodo. Lo so perché ospito siti e servizi per aziende e gestisco i miei siti. Lento = scontroso ma giù = furia. Anche se si scende solo per un minuto alla volta, se un utente riceve un avviso di "down-for-maintenance" più di un paio di volte, presume che non sia possibile mantenere il sito attivo.

Un server lento è tutt'altro che ideale ma lo swap non è lì per essere eseguito tutto il tempo, è l'ultima risorsa per consentire alle cose di continuare a funzionare mentre le risolvi.

Si presuppone inoltre che sulla macchina sia in esecuzione un solo servizio. Ancora una volta, questo potrebbe essere vero se hai megabucks per dividere tutto, ma nel mondo reale, le cose vengono messe insieme. Più siti Web, demoni ssh, server ftp, server e-mail, ecc. Un processo che perde nello scambio potrebbe non avere effetti su un altro servizio. Senza swap, tutto ha le stesse possibilità di terminazione istantanea e casuale. Non hai alcun controllo su di esso.

Naturalmente lo swap non è l'unica risposta. È necessario il monitoraggio per avvisarti quando sei fuori di testa, ma semplicemente staccare la spina e riavviare non è la risposta per la maggior parte delle persone. Sono sicuro che questo funziona per qualsiasi sito web multinazionale di cui sei responsabile, ma per noi semplici mortali (che costituiscono la maggior parte di Internet), farlo è un suicidio commerciale.


Stesse esperienze qui, un po '... è stato un errore dalla mia parte, non una decisione deliberata. Un server senza scambio è un inferno da riparare, specialmente se decide di uccidere sshd.
Javier Rivera,

Ho una RAM di circa 16 Gb, la metà è memorizzata nella cache per un IO veloce, il resto è per LAMPADA, lo scambio è sempre gratuito, o qualche volta c'è qualche mega, ma penso che sia sempre spento ...
Arman

3
Nel mondo dei siti Web di successo, non rispondere è peggio che rotto. Gli utenti apprezzeranno effettivamente un errore FAST (che, il tuo codice frontend javascript dovrebbe gestire con grazia tra l'altro), ma ti odieranno per essere lento. Abbandona lo scambio, ritarda l'inevitabile. -1
SpamapS

1
@Oli: l'esecuzione di N + 1 non richiede più megabucks, o anche molti dollari. In realtà non ci vogliono nemmeno abilità speciali. È inevitabile che un server si spenga per un numero qualsiasi di motivi, e non è così difficile impedire che ciò non costituisca un problema. Se si dispone di un server LAMP autonomo che fa tutto, ciò che costa di più; Configurare altri due e un bilanciamento del carico (su EC2 con t1.micros ed istantanee EBS, questo può essere MOLTO economico) o il tuo sito è insolitamente lento nel suo giorno più grande? Controlla i dati da google ... Penso che sia chiaro bit.ly/hB1AD1
SpamapS

1
Ottima risposta, che copre i casi di server del mondo reale. L'aggiunta di hardware ridondante, LB, monitoraggio, cache RAM, ecc. Sono tutti incredibilmente importanti e avrai il tempo di configurarli e di eseguirne il debug se non perdi tempo perché sei a corto di spazio di scambio.
ImaginaryRobots il

4

Non sono d'accordo con lo scambio sui server di produzione.

Nella mia esperienza, lo scambio del disco rotazionale rende il sistema meno prevedibile e più soggetto a frustranti guasti dell'intero sistema. Un server popolare ad alto carico che sta facendo qualcosa con un disco lento locale si trasformerà rapidamente in qualcosa di molto peggio di uno stato di errore. I tempi di risposta saliranno a 100 volte il loro livello normale e cose semplici come l'accesso tramite la console o ssh potrebbero richiedere minuti.

Lo scambio di SSD è un caso speciale e rimuoverebbe almeno il rallentamento del tempo di ricerca che di solito uccide il sistema. Tuttavia, le scritture sono ancora lente, quindi finirai per aspettare molto, molto tempo per riprendermi da un processo fuori controllo.

Senza scambio, il tuo server LAMP semplicemente ucciderà i processi per liberare la RAM. Un corretto monitoraggio dovrebbe avvisare l'utente e rimuovere i server dalla produzione in caso di interruzione di processi critici. Il caso peggiore qui è che tutti i tuoi metodi di accesso vengono eliminati e devi eseguire un hard reset / ciclo di accensione. Il caso peggiore è ancora altrettanto probabile con una macchina di scambio fuori controllo, ma molto più difficile da rilevare.

Se stai usando PHP, abilita i limiti di memoria e monitora i tuoi log per i loro errori. Ecco un trucco, imposta il limite inferiore sul tuo server di sviluppo rispetto alla produzione. Se stai usando mod_php sotto apache, imposta MaxRequestsPerChild su qualche migliaio, in modo che httpd muoia prima di diventare troppo grande nel tempo. Soprattutto, monitorare l'utilizzo della memoria! Spesso la memoria si insinua nel tempo ed è sufficiente riavviare periodicamente un servizio che perde durante il debug del problema.


1
Grazie per aver condiviso la tua esperienza. Stavo tenendo conto di problemi simili, quando ssh stava prendendo Inf. Ho appena costretto i processi ad avere una memoria limitata, ciò mi permetteva di far funzionare ssh e correggere gli script con errori.
Arman,

Una delle discussioni più interessanti sullo spazio di swap in produzione che ho visto su Internet. (l'intero thread, pro e contro)
dpb

3

Lo spazio di swap viene utilizzato quando il sistema decide che necessita di memoria fisica per i processi attivi e che la memoria fisica non utilizzata è insufficiente. Se il sistema necessita di più risorse o spazio di memoria, le pagine inattive nella memoria fisica vengono quindi spostate nello spazio di swap, liberando quindi quella memoria fisica per altri usi.

Questa situazione si verificherà molte volte nel server.

un). Uno script non ottimizzato può consumare una grande quantità di memoria
b). Gli script come il backup consumeranno sempre molta memoria
c). traffico pesante

Quindi è una buona pratica avere dello spazio di swap.

Maggiori dettagli: https://help.ubuntu.com/community/SwapFaq


Grazie per la spiegazione Se uno ha uno script difettoso, in ogni caso andrai in crash il server, i limiti di sistema dovrebbero controllare i tuoi script, non è vero?
Arman,

aneeshep, se si scambia durante un traffico intenso, il sistema sarà 100 volte più lento di quanto dovrebbe essere normalmente. Questo non è generalmente accettabile.
SpamapS,

2

L'uso di swap ti darà un'ulteriore protezione contro l'instabilità del server. Potrebbero esserci momenti in cui la RAM si sta esaurendo e sul server senza scambio che potrebbero causare un arresto anomalo.

Probabilmente sono in minoranza ora quando lo dico, ancora senso, come una volta raccomandavano, avere il doppio dello scambio rispetto alla memoria principale. Anche su un sistema con 96 GB di RAM.

Non costa molto e, se ne avrai bisogno un giorno, sarai contento di averlo ottenuto. Il motivo per abilitare lo swap è solo un'analisi costi-benefici molto semplice. Fallo! :-)


0

Vorrei ringraziare Oli per la bella risposta - lo so vecchio -. Trovo che il partizionamento sia un argomento sempre verde! Sono totalmente d'accordo con la linea del post di Oli e vorrei condividere questo - ovviamente migliorabile - script che utilizzo per monitorare l'utilizzo dello scambio dei miei server.

Configuro sempre server e servizi per funzionare senza alcuna occorrenza di swap. Quando sarà, assicurati che qualcosa stia andando storto, o nella migliore delle ipotesi, qualcosa sta superando i tuoi piani iniziali.

Crontab questo script ogni mezz'ora nell'ambiente di produzione. Mi invierà una notifica se l'utilizzo di Swap! = 0k. Sarò in grado di indagare tempestivamente / intraprendere azioni sul problema, la maggior parte delle volte, prima che le cose si sbagli davvero .

Si aspetta che tu abbia: bash, top, echo, awk e un comando di posta funzionante, senza eseguire alcun controllo.

Spero possa aiutare.

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="your@email.addr"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
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.