У нас есть несколько веб-сайтов, установленных на Windows Server 2008 R2 и IIS 7, которые иногда будут зависать, если их соответствующий пул приложений перерабатывается.
Под зависанием я подразумеваю, что браузер будет пытаться получить сайт и будет пытаться загрузить его в течение очень долгого времени, иногда через 5-10 минут он начинает отображать веб-страницу, иногда он ничего не показывает даже после этого времени и браузер по-прежнему не пытается загрузить веб-страницу.
Текущий обходной путь - войти на сервер с открытой консолью IIS 7 и запустить рабочий процесс, к которому подключен веб-сайт.
Что вызывает это и как решить эту проблему навсегда?
Проверяли ли вы свои журналы IIS, когда это происходит? Это может быть первое место для начала.
Это может быть вызвано остановкой вашего пула приложений или проблемой из-за слишком большого количества ошибок. Если вы перейдете к расширенным настройкам вашего пула приложений, там есть раздел защиты от Rapid-Fail.
Вы можете увеличить интервал отказов, а также максимальное количество отказов (количество отказов, разрешенных в этом интервале), но это не решит вашу проблему, но может предотвратить их частоту.
В разделе утилизации вы также можете принудительно перезапустить пул приложений автоматически через определенные интервалы, но это может вызвать некоторую потерю данных сеанса и сброс некоторых вещей для ваших конечных пользователей. Это также может помочь остановить только частоту, но не основную проблему.
Лучшее, что можно сделать, - это выяснить, почему он останавливается. Если это приложение asp.net, вы можете запустить такой инструмент, как elmah, чтобы регистрировать все ваши исключения, которые происходят в вашем приложении, и работать над их исправлением.
Вы проверяли загрузку ЦП во время "зависания"? Бесконечный цикл в коде приложения вызовет именно такое поведение. Если в цикле нет ввода-вывода, блокировки или спящего режима, вы сможете увидеть это по использованию ЦП, поскольку вы получите ровно одно полное ядро использования ЦП для каждого бесконечного цикла.