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

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

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

2 ответа

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

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

Скорее старый вопрос, но мой ответ на подобный вопрос покрывает это.

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

Другие вопросы по тегам