GNU/Linux >> Linux Esercitazione >  >> Linux

Ricevere il segnale prima che il processo venga ucciso da Oom Killer / Cgroups?

Nel nostro cluster, stiamo limitando le risorse dei nostri processi, ad es. memoria (memory.limit_in_bytes ).

Penso che, alla fine, questo sia gestito anche tramite il killer OOM nel kernel Linux (sembra leggendo il codice sorgente).

C'è un modo per ottenere un segnale prima che il mio processo venga interrotto? (Proprio come il -notify opzione per qsub di SGE , che invierà SIGUSR1 prima che il processo venga terminato.)

Ho letto di /dev/mem_notify qui ma non ce l'ho – c'è qualcos'altro al giorno d'oggi? Ho anche letto questo che sembra in qualche modo rilevante.

Voglio essere in grado di eseguire almeno il dump di una piccola traccia dello stack e forse qualche altra utile informazione di debug, ma forse posso anche recuperare liberando un po' di memoria.

Una soluzione che sto utilizzando attualmente è questo piccolo script che controlla frequentemente se sono vicino (95%) al limite e, in tal caso, invia al processo un SIGUSR1 . In Bash, sto avviando questo script in background (cgroup-mem-limit-watcher.py & ) in modo che controlli altri processi nello stesso cgroup e si chiuda automaticamente quando il processo Bash padre termina.

Risposta accettata:

È possibile registrarsi per una notifica quando l'utilizzo della memoria di un cgroup supera una soglia. In linea di principio, impostare la soglia in un punto adeguato al di sotto del limite effettivo ti permetterebbe di inviare un segnale o intraprendere altre azioni.

Vedi:

https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt


Linux
  1. Linux:in che modo Oom Killer decide quale processo uccidere per primo?

  2. Debian – Oom Killer non funziona correttamente, porta a un Os congelato?

  3. Impostare la regolazione Oom Killer per il processo all'avvio?

  4. Killer di memoria insufficiente di Linux

  5. Come evitare di andare in SWAP?

Linux:limite all'utilizzo della memoria per un singolo processo Linux?

Trovare quale processo è stato ucciso da Linux OOM killer

Cosa ha ucciso il mio processo e perché?

Malloc su Linux senza eseguire l'overcommit

Cos'è un processo interrotto in Linux?

OOM killer che uccide cose con molta (?) RAM libera