При определении «жизнеспособности» программы важно измерить этот аспект, который определяет, что он жив в полезной манере.
Несколько простых подходов «прокси» являются поверхностно привлекательными из-за их простоты, но принципиально не измеряют важный аспект.
Пожалуй, наиболее распространенными являются «Является ли процесс живой» и «отдельный сердцебиения широковещательный поток», вероятно, потому что это так просто сделать:
bool keepSending = true; // set this to false to shut down the thread
var hb = new Thread(() =>
{
while (true)
SendHeartbeatMessage();
}).Start();
Оба они, однако, имеют серьезный недостаток, если реальные рабочие потоки (ы) в вашем приложении блокируются (скажем, в бесконечном цикле или в тупике), тогда вы будете продолжать весело отправлять сообщения OK. Для мониторинга на основе процесса вы будете продолжать видеть процесс «живым», несмотря на то, что он больше не выполняет эту задачу.
Вы можете улучшить поток одним способом (значительно увеличивая сложность и вероятность проблем с потоками), накладывая на тесты на прогресс в основной теме, но это делает неправильное решение и пытается подтолкнуть его к правильному.
Что лучше всего сделать задачей (задачами), выполняемой частью программы проверки жизнеспособности. Возможно, чтобы сердце билось непосредственно из основного потока после выполнения каждой подзадачи (с порогом, чтобы убедиться, что это не происходит слишком часто) или просто посмотреть на выход (если он существует) и убедиться, что входы приводят к выходам.
Лучше еще проверить это как внутри, так и снаружи (особенно, если есть внешние потребители/пользователи программы). Если у вас есть веб-сервер: попытайтесь его использовать, если ваше приложение представляет собой систему на основе цикла событий: инициировать события, на которые он должен ответить (и проверить правильность вывода). Что бы ни было сделано, всегда считайте, что вы хотите проверить, что полезно, и правильное поведение происходит, а не просто какая-либо деятельность вообще.
Чем больше вы проверите не только о существовании программы, но это действия тем более полезной будет ваша проверка. Вы проверите больше системы, чем дальше вы выберете себя из внутреннего состояния, если вы запустите процесс мониторинга на ящике, вы можете проверять только локальную петлю, при запуске ящик проверяет гораздо больше сетевого стека, включая часто забытые аспекты, такие как DNS ,
Неизбежно это делает проверку сложнее, потому что вы, по сути, думаете о конкретной задаче, а не об общем решении, дивиденды от этого должны приносить достаточные выгоды, чтобы этот подход серьезно рассматривался во многих случаях.
Большое спасибо за это понимание; наиболее полезный. Я думаю, что этот метод лучше всего соответствует моим потребностям. – pierre