Soluzione 1:
Su sistemi di grandi dimensioni, 8 GB di RAM fisica, di solito assegniamo 2 GB di swap. Questi sono server di database caricati che eseguono Oracle o PostgreSQL. Per anni, non ho mai visto colpi di scambio anche sotto carico pesante. Il carico pesante è di circa 100-150 utenti che eseguono circa 10.000 letture SQL e forse 2.500 scritture al minuto.
Regoliamo anche il livello di swapiness fino a scoraggiare lo scambio e disattiviamo i processi non necessari che sappiamo di non aver bisogno di essere eseguiti. (Build Linux personalizzate)
Come Eddie, dice sopra, 1x RAM fisica è una buona regola pratica per qualsiasi cosa sotto i 4 GB. Faccio build Linux personalizzate per una grande azienda Fortune-500 e queste sono le cose che facciamo di solito, e non abbiamo avuto problemi negli ultimi 5 anni circa che ho consultato per loro.
Su sistemi più grandi:Linux a 64 bit con 32 GB e 64 GB di RAM, questi sono i nostri server di database Oracle e in genere manteniamo 2 GB di swap per cose come Eddie sottolinea sopra:i processi inattivi verranno spostati in swap a seconda delle impostazioni di swapiness. /P>
Soluzione 2:
Una domanda apparentemente senza tempo. I bravi ragazzi di SlashDot ne hanno discusso un po' di tempo fa. Scopri cosa avevano da dire:
- Lo spazio su disco non è un problema con i moderni HDD, 16 GB sono ancora una quantità irrisoria per le moderne unità da TB.
- Tuttavia, uno spazio di scambio significativo può essere un problema in caso di cattiva gestione della memoria:
Se guardo un film da 4 GB per un periodo di 2 ore, molti gestori di memoria decideranno che tentare di memorizzare nella cache tutti quei dati potrebbe essere una buona cosa. A metà del film, penserà che tutti gli altri programmi in esecuzione sono rimasti inutilizzati per un'ora e possono essere tranquillamente sostituiti a favore della memorizzazione nella cache di più di quel file da 4 GB. Il risultato finale è che metà dei tuoi programmi viene sostituita dopo aver visto un film, con il risultato di un sistema lento che distrugge tutto il file di scambio.
- Alla fine, la decisione giusta dovrebbe venire dai requisiti di memoria, non da formule approssimative:
Se hai [abbastanza RAM per eseguire i programmi che desideri utilizzare quotidianamente], allora non c'è motivo di utilizzare swap.
Soluzione 3:
Vedi la risposta Quanto spazio SWAP su un sistema con memoria elevata? per una guida, anche se la tua domanda è più generale. Le opinioni variano ampiamente su questo, ma generalmente le persone con 1 GiB di RAM o più sembrano funzionare senza swap interamente o con 1xmemory come swap.
Anche se non prevedi di utilizzare così tanta RAM da forzare lo scambio, c'è un certo valore nell'avere almeno 1xmemoria come scambio:consente al sistema operativo di scambiare alcune cose che non dovrebbero essere utilizzate immediatamente in modo che possa invece utilizzare quella memoria per il disco o per i buffer di I/O, ad esempio.
Soluzione 4:
Se ti aspetti che il tuo sistema sia in grado di ibernarsi e poi riprendere con successo :-) , probabilmente è meglio allocare più spazio per la partizione di swap rispetto alla quantità di RAM fisica
Soluzione 5:
Il mio provider VPS non fornisce nemmeno lo spazio di swap per i server e il mio funziona senza problemi.
La maggior parte dei server che vedo quotidianamente al lavoro sono anche senza swap.
Modifica
Tuttavia, se stai eseguendo una JVM, assicurati assicurati hai almeno tanto spazio di swap mai impostare -Xmx
a causa di un problema noto con la JVM.
In breve, quando la JVM ha bisogno di più memoria di quella che sta attualmente utilizzando (ma non ha ancora raggiunto il suo Xmx
), it:
- si scambia su disco
- alloca nuova memoria
- si rilegge nella RAM
Ciò significa che se fai lo scambio è inferiore al tuo Xmx
, può fallire.
Per citare la segnalazione di bug
La cosa migliore da fare è aumentare la dimensione dello swap sulle macchine che incontrano questo errore.
Cerco di andare sul sicuro quando lavoro con le JVM e imposto lo scambio su uguale memoria fisica.