Цель
Найти способ заставить IIS сообщать об основной причине ошибок 503.
Проблема
Спорадически в нашей производственной среде IIS начнет сообщать об ошибках 503для каждой конечной точки на нашем веб-сайте ASP.NET MVC.После запуска он, кажется, не восстанавливается без перезапуска пула приложений.Стоит отметить, что в диспетчере IIS пул приложений все еще работает , и я неоднократно обновлялся как проверка работоспособности.
Настройки
Я вычистил эти файлы перед загрузкойчтобы удалить что-нибудь чувствительное, поэтому, если имя пользователя и пароль отсутствуют, это должна быть красная сельдь.
Удаленная диагностика
- Посмотрел протоколирование всех наших исключений, но это ничего не выдало.Мы видим, что исключения генерируются, но они также обрабатываются.
- Посмотрел ошибки в журнале событий, и они не являются ошибками для IIS, ASP.NET или .NET Runtime.Я просмотрел остальную часть журнала событий и не смог найти ничего, что торчало.Я также говорил с нашей системной командой о том, чтобы убедиться, что у него есть привилегии для записи в журнал событий просто для безопасности.
Включил отслеживание сбоя запроса и проверил журналы.Мне удалось найти только сообщение «1033 *», вызвавшее 500. Я не нашел явно документации, в которой говорилось бы, что это правильно, но я предполагаю, что Operation completed successfully
относится к сообщению о проблеме клиенту.
Изучил трафик с нашего прокси на серверы с балансировкой нагрузки, на которых размещаются сайты.Мы используем HAProxy, а я использовал Graylog для агрегирования и изучения данных.Даже в часы пик трафика ничто не занимало более нескольких миллисекунд, но как только проблема возникла, многие запросы будут резервироваться в HAProxy и начнут значительно замедляться.Конечные точки, похоже, не имеют отношения к проблеме, и даже когда я смотрю на первый запрос, чтобы начать проблему, они не всегда одинаковы.
Локальная диагностика
Я попробовал эти случаи, чтобы посмотреть, смогу ли я вызвать симптомы, которые мы наблюдаем при производстве, на моей локальной машине.
- Вручную выкинул
ThreadAbortException
.В случае прерывания потока журнал невыполненных запросов был тем же, но пул приложений был остановлен, поэтому в производственной среде это не те же симптомы. - Установите для длины очереди пула приложений значение 10 (для производственных и локальных компьютеров).1000).Затем использовал JMeter, чтобы загнать мою локальную машину с ~ 800 запросами в секунду.Это вызвало точно такие же симптомы.К сожалению, даже введение второго работника (наше производство состоит из 2 работ и с балансировкой нагрузки) привело к тому, что эта проблема перестала проявлятьсяЯ еще не нашел средства, чтобы определить, достигаем ли мы ограничения на длину очереди.Я посмотрел на счетчики производительности, но они, похоже, не совпадают с трафиком, который я вижу в GrayLog.
Закрытие единственной вещи, которая даже отдаленно напоминала то, что я видел в производствеэто случай 2 моей локальной диагностики.Несмотря на это, я не нашел способа заставить IIS создать журнал с информацией, указывающей на это.