Cent OS: come posso disattivare o ridurre il sovraccarico di memoria ed è sicuro farlo?


20

Di tanto in tanto il "mio" server si blocca perché esaurisce la memoria e lo spazio di scambio. (continua a rispondere al ping ma niente di più, nemmeno ssh).

Mi è stato detto che Linux fa un sovraccarico di memoria, che per quanto ho capito è lo stesso che fanno le banche con il denaro: concede ai processi più memoria di quella effettivamente disponibile, supponendo che la maggior parte dei processi non utilizzerà effettivamente tutta la memoria richiesta, a almeno non tutti allo stesso tempo.

Supponiamo che questo sia in realtà il motivo per cui il mio sistema si blocca di tanto in tanto, non discutiamo qui se questo è il caso (vedi Cosa può causare l'arresto di TUTTI i servizi su un server, ma ancora rispondendo al ping? E come capire ) .

Così,

  1. come posso disabilitare o ridurre drasticamente il sovraccarico di memoria in CentOS? Ho letto che ci sono due impostazioni chiamate vm.overcommit_memory (valori 0, 1 o 2) e vm.overcommit_ratiom ma non ho idea di dove trovarle e modificarle (si spera che alcuni file di configurazione), quali valori dovrei provare e se devo riavviare il server per rendere effettive le modifiche.

  2. ed è sicuro? Quali effetti collaterali potrei aspettarmi? Quando cerco su overcommit_memory trovo cose spaventose come la gente che dice che il loro server non può più avviarsi ...

Dal momento che ciò che provoca l'improvviso aumento dell'utilizzo della memoria è mysql a causa delle query che vengono fatte da php che a sua volta viene chiamato mentre serve richieste HTTP, mi aspetto che solo alcuni script php non vengano completati e quindi circa 500 risposte di volta in volta quando il server è troppo occupato, il che è un rischio che posso correre (sicuramente meglio che l'intero server diventi inaccessibile e che sia difficile riavviarlo).

O può davvero impedire al mio server di riavviarsi se scelgo le impostazioni sbagliate?


1
La disabilitazione del sovraccarico non ti aiuterà quando sei davvero a corto di memoria. Tuttavia, l'aggiunta di RAM al server potrebbe essere d'aiuto.
Michael Hampton

2
Disabilitare l'overcommit non sarà la soluzione finale, ma aiuterà molto, se ogni volta che il server esaurisce la memoria (che è solo una volta ogni tanto per alcuni secondi) ho solo alcune richieste http rifiutate (o mal servito), invece di avere il mio server DIE completamente e per sempre (fino a quando non lo riavvio)
matteo

Risposte:


30

Il sovraccarico della memoria può essere disabilitato da vm.overcommit_memory=2

0 è la modalità predefinita, in cui il kernel determina euristicamente l'allocazione calcolando la memoria libera rispetto alla richiesta di allocazione in corso. E impostandolo su 1 abilita la modalità guidata, in cui il kernel pubblicizza sempre che ha memoria sufficiente per qualsiasi allocazione. Impostato su 2, significa che i processi possono allocare solo fino a una quantità configurabile ( overcommit_ratio) di RAM e inizieranno a ricevere errori di allocazione o messaggi OOM quando superano tale importo.

È sicuro farlo, no. Non ho visto alcun caso d'uso corretto in cui la disabilitazione del sovraccarico di memoria abbia effettivamente aiutato, a meno che tu non sia sicuro al 100% del carico di lavoro e della capacità hardware. Se sei interessato, installa il kernel-docspacchetto e vai /Documentation/sysctl/vm.txta leggere di più o leggerlo online .

Se impostato vm.overcommit_memory=2, verrà eseguito l'overcommiting fino alla percentuale di RAM fisica configurata in vm.overcommit_ratio(l'impostazione predefinita è 50%).

echo 0/1/2 > /proc/sys/vm/overcommit_memory 

Questo non sopravviverà al riavvio. Per persistenza, inseriscilo nel /etc/sysctl.conffile:

vm.overcommit_memory=X

e corri sysctl -p. Non è necessario riavviare.


la parte a cui non hai risposto è in quale file cambio l'impostazione vm.memory_overcommit e soprattutto se ho bisogno di riavviare (o cos'altro) per farlo entrare in vigore
matteo

2
echo 0/1/2> / proc / sys / vm / overcommit_memory Questo non sopravviverà al riavvio. Per persistenza, inseriscilo nel file /etc/sysctl.conf vm.overcommit_memory = X ed esegui sysctl -p. Non è necessario riavviare
Soham Chakraborty,

Molte grazie. Potresti per favore aggiungerlo al corpo della risposta in modo che io possa "accettarlo" formalmente.
matteo,

1
Aggiunta la nuova parte.
Soham Chakraborty,

4
"overcommit_ratio" ha un effetto importante quando si utilizza overcommit_memory = 2 - determina la percentuale di RAM fisica che può essere allocata! Quindi se il rapporto <100 allora lascerai un po 'di RAM non allocata, forse per cache del disco o simili. Il rapporto predefinito è del 50%, quindi utilizzerai solo il 50% della RAM fisica se non lo cambi!
David Gardner,

6

Dichiarazione totalmente non qualificata: disabilitare l'overcommit di memoria è sicuramente "più sicuro" che abilitarlo.

$ customer ha impostato su alcune centinaia di server Web e ha aiutato molto con problemi di stabilità. C'è anche un controllo Nagios che chiama il fuoco molto forte se NON viene mai disabilitato.

D'altra parte, le persone potrebbero non considerarlo "sicuro" se i loro processi vadano via dalla memoria quando vorrebbero solo sovraccaricare un piccolo montone e non lo userebbero mai. (ovvero SAP sarebbe un ottimo esempio)

Quindi, sei tornato a vedere se migliora le cose per te. Dal momento che stai già esaminando la questione per eliminare i problemi correlati, penso che potrebbe aiutarti.

(So ​​che rischierò un voto negativo da parte di una persona scontrosa)


3

Concordo sul fatto che disabilitare l'overcommit sia più sicuro che abilitarlo in alcune circostanze. Se il server esegue solo pochi lavori di memoria di grandi dimensioni (come le simulazioni di circuiti nel mio caso), è molto più sicuro negare l'applicazione la richiesta di memoria in anticipo piuttosto che attendere un evento OOM (che sicuramente seguirà a breve) Molto spesso vediamo server problemi dopo che il killer OOM ha fatto il suo lavoro.

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.