GNU/Linux >> Linux Esercitazione >  >> Linux

Come attivare l'azione in condizioni di memoria insufficiente in Linux?

Sì, il kernel di Linux fornisce un meccanismo per questo:notifica della pressione della memoria . Questo è documentato in https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt, sezione Memory Pressure .

In breve, registri un descrittore di file eventfd in /sys/fs/cgroup/memory/memory.pressure_level su cui vuoi ricevere le notifiche. Queste notifiche possono essere low , medium o critical . Un tipico caso d'uso sarebbe quello di liberare alcune o tutte le cache interne nel tuo processo quando ricevi una notifica, al fine di prevenire un'imminente uccisione di OOM.


Quello che stai chiedendo è, fondamentalmente, un callback basato sul kernel su una condizione di memoria insufficiente, giusto? Se è così, credo fermamente che il kernel non lo faccia fornire tale meccanismo, e per una buona ragione: essendo a corto di memoria, dovrebbe eseguire immediatamente l'unica cosa che può liberare memoria:il killer OOM. Qualsiasi altro programma può arrestare la macchina.

Ad ogni modo, puoi eseguire una semplice soluzione di monitoraggio nello spazio utente. In passato avevo lo stesso requisito di debug/azione con poca memoria e ho scritto una semplice bash che ha fatto quanto segue:

  • monitor per una filigrana morbida: se l'utilizzo della memoria è superiore a questa soglia, raccogliere alcune statistiche (processi, memoria libera/utilizzata, ecc.) e inviare un'e-mail di avviso;

  • monitor per una filigrana reale: se l'utilizzo della memoria è superiore a questa soglia, raccogli alcune statistiche e interrompi i processi che consumano più memoria (o meno importanti), quindi invia un'e-mail di avviso.

Uno script di questo tipo sarebbe molto leggero e può eseguire il polling della macchina a piccoli intervalli (ad esempio:15 secondi)


Linux
  1. Come registrare il consumo di memoria su Linux?

  2. Come utilizzare la memoria condivisa con Linux in C

  3. In che modo l'errore di memoria a bit singolo influirà su Linux?

  4. In che modo le impostazioni di ulimit influiscono su Linux?

  5. Come posizionare/memorizzare un file in memoria su Linux?

Come controllare l'utilizzo della memoria in Linux

Come controllare la memoria condivisa di Linux usando il comando ipcs

Come cancellare la memoria di scambio in Linux

Come disabilitare permanentemente lo scambio in Linux

Come pulire un po' di spazio su disco su un'istanza Linux?

Come funziona la memoria di scambio in Linux?