Подтвердить что ты не робот

ASP.NET MVC Почему мое приложение продолжает перезагружаться?

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

Я прочитал статью Скотта Гу: 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()

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

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

UPDATE: Здесь указаны настройки пула приложений, упомянутые Softion:

CPU

  • Предел: 0
  • Предельное действие: никаких действий
  • Предельный интервал: 5 минут

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

  • Тайм-аут ожидания: 20 минут
  • Максимальное время отклика Ping: 90 секунд
  • Лимит времени запуска: 90 секунд

Ускоренная защита

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

Переработка

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

Ответ 1

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

     var shutdownReason = HostingEnvironment.ShutdownReason;

Shutdown reason codes

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

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

enter image description here

Для 6500 хитов в день, что является очень низким коэффициентом хита, я ставлю, что "Idle time-out" установлен на 5mn.

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

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

Ответ 2

re update:

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

Вам действительно нужно:

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


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

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

Типичные рециркуляции:

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

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

Ответ 3

Установлен ли IIS для частого использования пула приложений?

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

Ответ 4

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

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

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