ASP.NET MVC, почему мое приложение продолжает перезапускаться? - PullRequest
21 голосов
/ 16 марта 2011

У меня есть веб-сайт ASP.NET MVC, который получает около 6500 посещений в день на платформе общего хостинга в Сервер-Интеллект. Я продолжаю видеть, что приложение перезагружается в журналах, и я не могу понять, почему.

Я читал статью Скотта Гу здесь: http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx и реализовал технику, и вот что отображается в моем журнале:

Application Shutdown: 
_shutDownMessage=HostingEnvironment initiated shutdown 
HostingEnvironment caused shutdown    
_shutDownStack=at
System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)     at 
System.Environment.get_StackTrace()     at 
System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()     at 
System.Web.Hosting.HostingEnvironment.InitiateShutdown()     at 
System.Web.Hosting.PipelineRuntime.StopProcessing()

Кажется, это происходит примерно каждые пять минут.

Есть ли другие способы отладки этого?

ОБНОВЛЕНИЕ: Вот настройки пула приложений, упомянутые Softion:

CPU

  • Лимит: 0
  • Ограничение действия: бездействие
  • Предел интервала: 5 минут

Модель процесса

  • Время простоя: 20 минут
  • Ping Максимальное время отклика: 90 секунд
  • Ограничение времени запуска: 90 секунд

Быстрая защита от сбоев

  • Включено: True
  • Интервал отказа: 5 минут

Переработка

  • Предел приватной памяти: 100 МБ
  • Регулярный интервал времени: 1740 минут (29 часов)
  • лимит запросов: 0
  • Определенное время: нет
  • Предел виртуальной памяти: 0

Ответы [ 4 ]

30 голосов
/ 05 июня 2011

Вы можете легко определить причину отключения HostingEnvironment.Вы прочитали статью Скотта Гу, но пропустили ее комментарии.

     var shutdownReason = HostingEnvironment.ShutdownReason;

Shutdown reason codes

Если причина в HostingEnvironment, проверьте параметры пула приложений IIS, управляющие утилизацией.Я поставил красную точку рядом с каждой.Проверьте описание в нижнем окне справки в своей собственной копии для получения полной информации.

Вы можете попросить своего провайдера предоставить вам файл applicationHost.config, в котором установлены все эти параметры.Они находят его в C: \ Windows \ System32 \ inetsrv \ config.Я уверен, что вы также можете получить их, используя некоторые .NET API.

enter image description here

Для 6500 хитов в день, что является очень низким коэффициентом попадания, я держу пари "Время ожидания простоя "установлено равным 5 мин.

Обновление (перенесены комментарии сюда // jgauffin)

  • CPU Limit 0 = отключено.
  • Тайм-аут простоя модели процесса: 20 минут (20 минут без запроса перезагружает ваше приложение).
  • Включена быстрая защита от сбоев (5 мин).Вам нужно знать максимальное количество сбоев.Если ваше приложение сгенерирует больше, чем число исключений в 5 млн., Оно будет переработано.
  • Предел частной памяти: 100 МБ.Да, вы должны профиль, это низкий предел.
  • Регулярный интервал времени: 1740 минут (29 часов): он будет перерабатываться каждые 29 часов.
  • Предел запроса: 0 (отключен).
  • Ограничение виртуальной памяти: 0 (отключено).
  • Быстрая защита от сбоев включена (5 мин).Вам нужно максимальное количество отказов.Если ваше приложение выбрасывает больше, чем это исключение, подсчитывается в 5 мин.Если он повторяется каждые 5 минут, это следует проверить.Во вторичных рабочих потоках должно быть 0 необработанных исключений.Оберните ваш код в пробную версию.
3 голосов
/ 04 июня 2011

повторное обновление:

Настройки, запрошенные в справочной системе провайдера, но лучше запросить информацию о причине перезапусков, как я упоминал в своем исходном ответе, то есть фактические записи журнала перезапусков, как я упоминал в своем ответе orig. Из тех, кого вы можете точно знать, что было вызвано, я видел, как один раз достигал других пределов.

Вы действительно должны:

профилируйте вашу заявку с реалистичное количество тестовых данных


Мои деньги идут на ограничение ресурсов, установленное вашим хостинг-провайдером.

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

Типичные повторения:

  • холостой ход x количество времени / около 15 минут
  • больше, чем x объем памяти / около 200 МБ
  • более чем на x% процессор за время y / около 70 за 1 минуту
  • ежедневная переработка

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

1 голос
/ 03 июня 2011

Требуется немного знаний о том, что делает ваше приложение, вот список вещей, которые могут вызвать перезапуск / сброс или даже завершение работы приложения

  • StackOverflowException
  • OutOfMemoryException
  • Любое необработанное исключение, которое приводит к сбою потока
  • CodeContracts использует Environment.FailFast при нарушении договора

Исключения довольно легко отследить, если вы можете воспроизвести проблему с подключенным отладчиком, вы можете перейти в Visual Studio и включить все исключения, когда они выбрасываются, не перехватываясь пользовательским кодом. Иногда он обнаруживает интересные вещи, которые в противном случае скрыты.

1 голос
/ 16 марта 2011

IIS настроен на частую перезапуск пула приложений?

Есть ли какая-то утечка памяти в пуле приложений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...