Как инициировать действие при нехватке памяти в Linux?

Я нашел решение здесь:

https://askbot.fedoraproject.org/en/question/43367/how-to-hide- sure -users-from-gdm-logon-list /

В каталоге / var / lib / AccountsService / users отредактируйте файл, чтобы исключить имя пользователя (скопируйте другой, если он не существует), и установите SystemAccount = true . Перезапустите службу gdm3 (как root) с помощью

# systemctl restart gdm3.service

. Если вы находитесь в сеансе gdm, вы выйдете из системы, и исключенный пользователь не будет отображаться на экране входа в систему.

7
13.04.2017, 23:19
2 ответа

То, о чем вы спрашиваете, это, по сути, обратный вызов на основе ядра при нехватке памяти, верно? Если это так, то я твердо уверен, что ядро ​​не предоставляет такой механизм, и на то есть веская причина: из-за нехватки памяти оно должно немедленно запускать единственное, что может освободить часть памяти - убийца ООМ. Любые другие программы могут остановить машину.

В любом случае, вы можете запустить простое решение для мониторинга в пользовательском пространстве. В прошлом у меня было такое же требование отладки/действия с нехваткой памяти, и я написал простой bash, который делал следующее:

  • монитор для мягкого водяного знака: некоторая статистика (процессы, свободная/используемая память и т.д.) и отправка предупреждения по электронной почте;

  • отслеживайте наличие жестких водяных знаков: если использование памяти превышает этот порог, соберите некоторую статистику и завершите более требовательные к памяти (или менее важные) процессы, а затем отправьте оповещение по электронной почте.

Такой сценарий был бы очень легким, и он мог бы опрашивать машину с небольшими интервалами (например, 15 секунд)

8
27.01.2020, 20:15

Да, ядро ​​Linux предоставляет механизм для этого:уведомления о нехватке памяти . Это описано в https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt, секция Memory Pressure .

Короче говоря, вы регистрируете файловый дескриптор eventfd в /sys/fs/cgroup/memory/memory.pressure_level, по которому хотите получать уведомления. Эти уведомления могут быть low, mediumили critical. Типичным вариантом использования будет освобождение некоторых или всех внутренних кэшей в вашем процессе при получении уведомления, чтобы предотвратить надвигающееся уничтожение OOM.

17
27.01.2020, 20:15

Теги

Похожие вопросы