У меня проблема с одним обработчиком async в распределенном веб-приложении ASP.NET. Сначала позвольте мне пояснить пример использования:
- приложение использует IIS 8 на машине с 2012 годом с .NET Framework 4.5.2.
-
приложение отключило модули сеанса и аутентификации через web.config, как это
<system.webServer> .... <modules> <remove name="WindowsAuthentication" /> <remove name="Session" /> <remove name="FormsAuthentication" /> </modules> </system.webServer>
-
приложение использует пользовательский обработчик async для обслуживания конкретного запроса
- приложение имеет очень большой трафик (около 50 тыс. запросов в минуту на сервер, обработчик async имеет около 10 тыс. запросов в минуту на каждый сервер, отслеживаемый с помощью NewRelic) Приложение
- распространяется через несколько процессов w3wp (2 процесса w3wp) и несколько виртуальных серверов (около 10 серверов).
- приложение имеет большое количество соединений
Все нормальные (запросы синхронизации) работают нормально, но запрос async, который выполняет немного больше работы (что мы используем async-запрос), часто медленный, но NewRelic сообщает, что он медленный из-за "AcquireRequestState". Теперь я просмотрел переполнение google и stack, и это событие связано с созданием сеанса, но у нас отключены сеансы в web.config. Кто-нибудь знает, что еще может сделать "AcquireRequestState"? Нам не хватает места для удаления состояния сеанса? Добавив, что из web.config в machine.config ничего не сделал...
Вот фрагмент запроса в NewRelic:
**Slowest components Count Duration % **
AcquireRequestState 1 12,600 ms 100% --> WTF?
ExecuteRequestHandler 1 5.01 ms 0%
Integrated Pipeline 1 0.334 ms 0%
UpdateRequestCache 1 0.3 ms 0%
EndRequest 1 0.168 ms 0%
AuthenticateRequest 1 0.161 ms 0%
Total time 12,600 ms 100%
EDIT:
У меня <sessionState mode="Off" />
в разделе web.config(<system.web>
), так что это не так.