Ano, linuxové jádro k tomu poskytuje mechanismus:upozornění na tlak paměti . To je zdokumentováno v https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt, sekce Tlak paměti .
Stručně řečeno, zaregistrujete deskriptor souboru eventfd v /sys/fs/cgroup/memory/memory.pressure_level
na které chcete dostávat upozornění. Tato oznámení mohou být low
, medium
nebo critical
. Typickým případem použití by bylo uvolnění některých nebo všech interních mezipamětí ve vašem procesu, když obdržíte oznámení, aby se zabránilo hrozícímu zabití OOM.
To, na co se ptáte, je v podstatě zpětné volání založené na jádře při nedostatku paměti, že? Pokud ano, pevně věřím, že jádro ne poskytnout takový mechanismus a z dobrého důvodu: protože je málo paměti, mělo by okamžitě spustit jedinou věc, která může uvolnit část paměti - zabiják OOM. Jakékoli jiné programy mohou stroj zastavit.
Každopádně v uživatelském prostoru můžete spustit jednoduché řešení monitorování. V minulosti jsem měl stejný požadavek na ladění/akci s nízkou pamětí a napsal jsem jednoduchý bash, který provedl následující:
-
sledovat měkký vodoznak: pokud je využití paměti nad touto hranicí, shromážděte nějaké statistiky (procesy, volná/použitá paměť atd.) a odešlete varovný e-mail;
-
sledovat tvrdý vodoznak: pokud je využití paměti nad touto prahovou hodnotou, shromážděte nějaké statistiky a zastavte procesy, které mají větší nároky na paměť (nebo méně důležité), pak pošlete varovný e-mail.
Takový skript by byl velmi lehký a může se dotazovat stroje v malých intervalech (tj.:15 sekund)