Рассмотрим систему с ограниченной памятью, например небольшой VPS. Предположим, что есть несколько процессов, которым необходимо оставаться в живых, и один процесс «P», который было бы неплохо иметь под рукой, но это не является строго необходимым. Что я хотел бы сделать, так это поддерживать P в периоды низкой активности, но когда активность поднимается выше определенного порога, убивайте P до тех пор, пока активность снова не снизится, и в это время я хочу, чтобы P вернулась. Я еще не уверен, что я хотел бы иметь в виду под словом «активность», но это может быть любое из: использование памяти, использование подкачки, значения нагрузки на сервер.
Я уже использую Monit, поэтому было бы хорошо, если бы это можно было сделать с помощью Monit. Имейте в виду, что я не имел в виду обработать использование памяти, я имею в виду в целом система нагрузка. Однако мне не нужно использовать для этого Monit, если что-то еще поможет.
Как сказал cjc, лучший способ обойти это - предоставить достаточно подкачки, чтобы все процессы работали.
Если у вас есть много сервисов, которые вы хотите сохранить доступными (но не обязательно работающими / работающими), вы можете подумать о inetd
- их. Тогда они будут запущены только тогда, когда кто-то действительно подключится к определенному порту на сервере. Обратная сторона: не все протоколы имеют inetd
реализации.
Скорее старый вопрос, но мой ответ к аналогичному вопросу относится это.
Краткая версия: вы можете использовать сигналы STOP и CONT для приостановки и возобновления большинства процессов, интенсивно использующих память, и есть автоматизированный инструмент, который сделает это за вас, когда сервер перегружен.