Недавно у нас был построен новый производственный сервер для обслуживания бизнес-приложения ASP.NET 4.0. Технические характеристики нового сервера: Windows Server 2008 R2, 2-ядерный Xenon, IIS 7.5, 2 ГБ оперативной памяти (скоро будет 4 ГБ). До появления нового сервера мы запускали / тестировали приложение на Windows Server 2003, одноядерный, IIS 6, 4 Гб оперативной памяти.
Наше приложение использует веб-службу ASMX для проверки логинов в Active Directory с помощью LDAP.
Мы сразу заметили значительное увеличение времени отклика при обращении к веб-службе с нового сервера, но только при «первом обращении». Как ни странно, в 99,9% случаев время отклика для этого «первого попадания» составляет 15 секунд (буквально между 15000 и 15999 мс). Последующие обращения приводят к типичному времени ответа (<100–300 мс) для всех пользователей. Однако ожидание более 2–3 минут приведет к повторению этого «первого попадания».
Время отклика той же службы на старом сервере никогда не превышает 300 мс ... Даже после перезапуска IIS6.
Маршрут трассировки как для старого, так и для нового сервера одинаков. То же самое со временем отклика Ping.
После долгих испытаний единственный надежный способ воспроизвести (и, таким образом, определить «первое попадание»):
а) подождите 2-3 минуты, или
б) переработать пул приложений или
в) перезапустить IIS
Приложение работает в собственном пуле приложений с использованием .NET 4.0 Framework.
Вот текущее состояние приложения и IIS:
- Вся переработка отключена для всех пулов (тайм-аут простоя и фиксированные интервалы)
- Нет отладочных ссылок в Web.config
- Приложение предварительно скомпилировано (опубликовано через Visual Studio)
- Управляемый трубопровод = интегрированный
- Identity = NetworkService
- Работа в 64-битном режиме (переход в 32-битный режим не повлиял)
Сначала я подумал, что это проблема утилизации, так как я видел много сообщений по этому поводу. Однако это не объясняет, почему поведение «первого удара» происходит после ожидания всего 2-3 минуты.
Единственное, чего я не пробовал, так это разминку IIS. Это потому, что а) у меня нет прав на его установку и б) на мой взгляд, «первым попаданием» является фактическая страница входа, а не служба (если я не ошибаюсь). Страница входа загружается менее чем за 300 мс, независимо от того, «первое попадание» или нет.
Еще одно замечание ... На самом деле у нас есть два новых прод-сервера, которые идентичны. Одно из других наших приложений использует балансировку нагрузки на обоих серверах. Рассматриваемое здесь приложение находится только на одном из серверов и не балансируется по нагрузке. Может ли это иметь какое-то отношение к этому ...?
Надеюсь, ты сможешь помочь!
В итоге наши айтишники решили проблему.
Хотя они не совсем понимали, в чем была настоящая проблема, они думали, что это произошло из-за того, что с нашим доменным именем было связано два IP-адреса (для балансировки нагрузки). После настройки и запуска Round Robin (VMWare) проблема, похоже, исчезла сама собой.