Предположим, что есть программа на C #, которая используется в качестве службы Windows. Давайте предположим, что сервис вышел из строя и потребляет процессор и память как сумасшедший. Его нужно перезапустить очень скоро, потому что это производственная система. Так что у меня не так много времени, чтобы собрать информацию во время выполнения. Может быть, быстрый взгляд на диспетчер задач ... и все.
После этого все, что у меня есть, - это файлы журнала log4net и журнал событий Windows для анализа после смерти.
Предположим, я выяснил причину проблемы. Кто-то еще это исправляет, и, возможно, программист добавляет дополнительные записи в журналы, чтобы в следующий раз я мог быстрее найти подобную проблему. Тем не менее: я все еще зависит от качества файлов журнала и надеюсь, что в следующий раз проблема будет как-то проявляться в журналах.
Существуют ли другие способы проведения посмертного анализа? Может быть, что-то вроде дампов потоков (как в java), дампов памяти или чего-то еще, что может помочь в анализе после смерти? Может быть, поможет какой-нибудь встроенный инструмент .NET Framework?
Я очень заинтересован в реальном опыте проекта и в том, как бы вы попытались решить этот вопрос обслуживания, который, я думаю, очень актуален для большинства программистов.