Risposte:
Un altro approccio consiste nel disabilitare il sovrautilizzo della memoria.
Per ripristinare una parvenza di sanità mentale nella gestione della memoria:
- Disabilita OOM Killer (Inserisci
vm.oom-kill = 0
in /etc/sysctl.conf)- Disabilitare la memoria overcommit (Put
vm.overcommit_memory = 2
a/etc/sysctl.conf
)Queste impostazioni faranno comportare Linux nel modo tradizionale (se un processo richiede più memoria di quella disponibile
Si noti che questo è un valore ternario:malloc()
non andrà a buon fine e il processo che richiede la memoria dovrebbe far fronte a quell'errore).
- 0 = "stima se abbiamo abbastanza RAM"
- 1 = "Dì sempre di sì"
- 2 = "dire di no se non abbiamo memoria"
Ciò costringerà l'applicazione a gestire l'esaurimento della memoria stessa, e probabilmente i suoi registri / coredump / ecc. Potrebbero darti qualcosa di utile.
NOTA: quando il sistema esaurisce la memoria, non sarà possibile generare nuovi processi! Potresti essere bloccato fuori dal sistema.
echo 1 > /proc/sys/vm/oom_dump_tasks
che sembra circa il massimo che puoi far visualizzare al kernel su errori di memoria insufficiente.
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Abilita un dump di attività a livello di sistema (esclusi i thread del kernel) da produrre quando il kernel esegue un'omicidio OOM e include informazioni come pid, uid, tgid, dimensione vm, rss, nr_ptes, swapents, punteggio oom_score_adj e nome. Questo è utile per determinare perché il killer OOM è stato invocato, per identificare l'attività canaglia che lo ha causato e per determinare perché il killer OOM ha scelto il compito che ha fatto per uccidere.
Se impostato su zero, questa informazione viene soppressa. Su sistemi molto grandi con migliaia di attività potrebbe non essere possibile scaricare le informazioni sullo stato della memoria per ognuna. Tali sistemi non dovrebbero essere costretti a incorrere in una penalità di prestazione in condizioni OOM quando le informazioni potrebbero non essere desiderate.
Se impostato su un valore diverso da zero, queste informazioni vengono visualizzate ogni volta che il killer OOM uccide effettivamente un'attività di hogging della memoria.