Lo swap utilizzato non è male, ma molta attività di swap lo è
vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
6 0 521040 114564 6688 377308 8 13 639 173 0 1100 5 4 90 0
1 0 521040 114964 6688 377448 0 0 256 0 0 1826 3 4 94 0
0 0 521040 115956 6688 377448 0 0 0 0 0 1182 7 3 90 0
0 0 521036 115992 6688 377448 4 0 16 0 0 1154 10 2 88 0
3 0 521036 114628 6696 377640 0 0 928 224 0 1503 15 17 67 1
La colonna di swapd non è affatto un problema. Valori diversi da zero sulle colonne si e quindi sono mortali per le prestazioni del server. Soprattutto quelli con molta RAM.
È meglio disabilitare lo swapinness su macchine con diversi GB di RAM:
sysctl -w vm.swappiness=0
Ciò non disabiliterà lo scambio. Indica a Linux solo di utilizzare lo swap come ultima risorsa. Ciò sprecherà alcuni MB di programmi che non devono essere nella RAM ... Ma è preferibile scambiare il gonfiore delle code di accesso al disco.
Modifica 1: perché il valore predefinito di swapiness non è ottimale
Dobbiamo ricordare due decenni fa che un grande 486 aveva solo 32 Mb di RAM. Gli algoritmi di swap sono stati sviluppati quando l'intera RAM poteva essere spostata sul disco in una piccola frazione di secondo. Anche con i dischi più lenti di quel tempo. Questo è il motivo per cui i criteri di scambio predefiniti sono così aggressivi. La RAM era il collo di bottiglia in quei giorni. Da allora la dimensione della RAM è aumentata di oltre 10.000 volte e la velocità del disco è inferiore a 10 volte. Ciò ha spostato il collo di bottiglia sulla larghezza di banda del disco.
Modifica 2: perché l'attività è così letale per i server?
Si e così l' attività su macchine con tonnellate di RAM è mortale perché significa che il sistema sta combattendo con se stesso per la RAM. Quello che succede è che i dischi, anche i grandi archivi sono troppo lenti rispetto alle RAM. Lo scambio aggressivo favorisce la cache del disco del kernel rispetto ai dati dell'applicazione ed è la fonte più comune di lotta per la RAM. Poiché il sistema operativo dovrà liberare la cache del disco su ogni si , il tempo necessario per vivere la cache aggiuntiva fornita dallo swap è troppo basso per essere comunque utile. Il risultato è che stai prendendo la larghezza di banda del disco per memorizzare la cache che probabilmente non verrà utilizzata e mettere in pausa i tuoi programmi in attesa delle pagine si . Ciò significa che consuma molte risorse critiche con scarsi o nulli vantaggi per le applicazioni.
Nota il titolo della risposta "molta attività di scambio su server con molta RAM". Questo non si applica alle macchine con si occasionale e quindi attività. Ciò potrebbe non applicarsi in futuro se nei sistemi operativi vengono sviluppati algoritmi di scambio più intelligenti.
Modifica 3: pagine "fredde"
Le persone romanticizzano l'algoritmo di scambio. Alcuni dicono "richiede meno pagine della RAM utilizzate", ma questo non è affatto ciò che fa il kernel. La cosa che è difficile da capire su swap è che il kernel non sa cosa sia una "pagina fredda". Il kernel non ha una buona metrica per determinare se la pagina viene utilizzata o probabilmente verrà utilizzata nel prossimo futuro. Per evitare che il kernel inserisca le pagine nello scambio più o meno in modo casuale e le pagine non necessarie restano lì. Il problema di quell'algoritmo è che le pagine devono andare allo scambio per sapere se sono necessarie per le applicazioni. E questo significa che molte pagine "calde" andranno allo scambio. Il problema è che i dischi sono troppo dannatamente lenti rispetto alla RAM.
Ho costruito il mio benchmark che è uno scenario realistico molto comune a molte applicazioni con un volume decente. Dai miei test, non ho riscontrato alcun vantaggio sulla velocità effettiva o sulla latenza quando sono in uso gli swap. Lontano da esso. Quando si avvia lo scambio, questo rallenta la velocità effettiva e la latenza di almeno un ordine di grandezza.
Vado un po 'oltre a questo: capisco che lo swap non è per l'elaborazione. Gli swap sono solo per le emergenze. Quei momenti in cui troppe applicazioni sono in esecuzione contemporaneamente e si ottiene un picco di memoria. Senza scambio ciò causerebbe errori di memoria insufficiente. Considero l'utilizzo dello swap un fallimento dei team di sviluppo e produzione. Questa è solo un'opinione che va ben oltre ciò di cui abbiamo discusso qui, ma è quello che penso. Naturalmente le mie applicazioni hanno un'eccellente gestione della memoria da sole.