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
Ответы
Ответ 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 и включить все исключения, если они не попали в код пользователя. Иногда он обнаруживает интересные вещи, которые иначе скрыты.