Назад | Перейти на главную страницу

Убить или оживить процесс в зависимости от использования системной памяти

Рассмотрим систему с ограниченной памятью, например небольшой VPS. Предположим, что есть несколько процессов, которым необходимо оставаться в живых, и один процесс «P», который было бы неплохо иметь под рукой, но это не является строго необходимым. Что я хотел бы сделать, так это поддерживать P в периоды низкой активности, но когда активность поднимается выше определенного порога, убивайте P до тех пор, пока активность снова не снизится, и в это время я хочу, чтобы P вернулась. Я еще не уверен, что я хотел бы иметь в виду под словом «активность», но это может быть любое из: использование памяти, использование подкачки, значения нагрузки на сервер.

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

Как сказал cjc, лучший способ обойти это - предоставить достаточно подкачки, чтобы все процессы работали.

Если у вас есть много сервисов, которые вы хотите сохранить доступными (но не обязательно работающими / работающими), вы можете подумать о inetd- их. Тогда они будут запущены только тогда, когда кто-то действительно подключится к определенному порту на сервере. Обратная сторона: не все протоколы имеют inetd реализации.

Скорее старый вопрос, но мой ответ к аналогичному вопросу относится это.

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