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