Как я могу отслеживать и перезапускать свое приложение, работающее в Docker, в зависимости от использования памяти? - PullRequest
0 голосов
/ 23 апреля 2019

У меня в Docker запущено приложение, которое со временем теряет память.Мне нужно периодически перезапускать это приложение, когда использование памяти превышает порог.Мое приложение может реагировать на сигналы или касаться tmp/restart.txt (это Rails) ... до тех пор, пока я могу запускать сценарий или отправлять настраиваемый сигнал при срабатывании ограничений, я могу безопасно выключить / перезапустить свой процесс.

Я рассмотрел ограничение использования памяти с помощью Docker , но я не вижу настраиваемого действия при достижении лимита или резервирования.SIGKILL не подходит для моего приложения ... Мне нужно время для очистки.

Я использую runit в качестве минимальной системы инициализации внутри контейнера и ECS для оркестровки контейнеров.Это похоже на проблему, которая решается на уровне приложения или инициализации ... убийство контейнера, а не перезапуск процесса кажется тяжелым.

Я использовал Monit для этого в прошлом, но мне не нравится, как Monit работает с pid-файлами ... слишком часто Monit теряет контроль над процессом.Я пробую Inspeqtor , который, кажется, очень хорошо отвечает требованиям, но, хотя он поддерживает runit, нет пакетов, которые работают с runit из коробки.

Так что мой вопрос, еслиSIGKILL не подходит для моего варианта использования. Каков наилучший способ контролировать процесс на предмет использования памяти, а затем выполнять действие очистки / перезапуска на основе того, что использование превышает пороговое значение?

...