Ottieni un dump principale di / debug di un processo ucciso da oom-killer


10

Esiste un modo per ottenere un dump principale o essere in grado di eseguire il debug di un processo che è stato ucciso da Oom-Killer?

O addirittura impostare oom-killer per provare a uccidere un processo usando invece ABRT?

Risposte:


5

Un altro approccio consiste nel disabilitare il sovrautilizzo della memoria.

Per ripristinare una parvenza di sanità mentale nella gestione della memoria:

  1. Disabilita OOM Killer (Inserisci vm.oom-kill = 0in /etc/sysctl.conf)
  2. Disabilitare la memoria overcommit (Put vm.overcommit_memory = 2a /etc/sysctl.conf)

Queste impostazioni faranno comportare Linux nel modo tradizionale (se un processo richiede più memoria di quella disponibile malloc()non andrà a buon fine e il processo che richiede la memoria dovrebbe far fronte a quell'errore).

Si noti che questo è un valore ternario:
  • 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.

AGGIORNAMENTO # 1

NOTA: quando il sistema esaurisce la memoria, non sarà possibile generare nuovi processi! Potresti essere bloccato fuori dal sistema.


Questa è un'idea terribile. La maggior parte dei software in esecuzione sul sistema probabilmente non gestisce correttamente il valore restituito dall'errore di allocazione della memoria. Ciò causerà l'esecuzione di percorsi di codice che praticamente non vengono mai eseguiti da nessuno e, nel peggiore dei casi, potrebbe persino introdurre vulnerabilità di sicurezza nel sistema dall'esecuzione di questi percorsi di codice non testati e imprevisti.
KJ Tsanaktsidis,

4
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.

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.