намеки на надвигающуюся неудачу - PullRequest
4 голосов
/ 24 июня 2010

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

Это для C # /asp.net и IIS.

Примеры программной проверки значения были бы хорошими, но не обязательными.Любые хорошие идеи приветствуются.

Ответы [ 5 ]

2 голосов
/ 24 июня 2010

У меня на самом деле была попытка выяснить это несколько лет назад. Оказывается, это очень, очень сложное мероприятие - в наши дни вы даже не можете доверять ОС, поэтому работа в песочнице .net сделает практически невозможным определение того, что происходит на самом деле.

Вот лишь несколько простых ситуаций, которые вы можете принять во внимание, если решите продолжить.

CPU - вы можете определить текущее использование CPU, но как определить, был ли ваш конкретный экземпляр привязан к одному CPU? Как вы определяете, работаете ли вы в кластере или что могут делать другие ядра? Возможно, вы работаете на виртуальной машине с ограниченным ЦП или потоками - эти ограничения могут быть изменены на лету.

Память - что если вы работаете в виртуализированном экземпляре? Что если вдруг произойдет внешнее изменение для увеличения или уменьшения объема доступной памяти?

2 голосов
/ 24 июня 2010

Мои мысли:

Определите производительность входов и выходов вашего веб-приложения.

  • Входы (количество пользователей, какие задачи пользователи выполняют, время суток и т. Д.)
  • Выходы (использование памяти, потоки, отставание)

Профилируйте вашу заявку под реальными данными запроса. Создайте красивую таблицу входов и связанных с ними выходов. Например:

4 users calling page1 -> costs 4   - 6   mb, 4 threads
5 users calling page1 -> costs 7   - 14  mb, 5 threads
2 users calling page2 -> costs 120 - 200 mb, 1 thread

Найдите выходы, которые часто вызывают сбой, и найдите, какие входы вызывают эти выходы. Создайте красивую модель с максимальной вероятностью неудачи.

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

ОБНОВЛЕНО в ответ на комментарий:

Поиск выходов - самая простая часть.

См. Вопросы SO Как использовать память в c # , Как узнать использование процессора в C # и для более общего вопроса Какие ключевые мониторы производительности следует смотреть для приложения asp.net .

Ключевые вопросы из этих вопросов:

  • GC.GetTotalMemory - сообщает, сколько выделено сборщиком мусора.

  • Объект процессора - сообщает всевозможные интересные статистические данные о производительности процессора (время простоя процессора, использование и т. Д.).

2 голосов
/ 24 июня 2010

Вы можете программно получить доступ к значениям некоторых встроенных счетчиков производительности системы.Если вам нужна еще более конкретная информация, вы также можете создать собственные счетчики для запроса.

Вот статья для начала: Как программно рассчитать загрузку ЦП

0 голосов
/ 24 июня 2010

Возможно, это не запрограммировано, но подсчет количества часов в сутки или сверхурочных, которые вы должны выполнить, чтобы не допустить его падения, может быть хорошим индикатором.: -)

0 голосов
/ 24 июня 2010

Похоже, вас больше интересуют внешние причины сбоев, а не само приложение.Я думаю, что вы пытаетесь заняться сизифовой задачей здесь;вместо того, чтобы пытаться угадать возможные факторы отказа, сконцентрируйтесь на настройке вашего рабочего процесса для устранения любой из этих проблем.Рабочие процессы IIS обладают высокой отказоустойчивостью - проверьте функции проверки связи, утилизации и т. Д.

...