Длительные задержки в AcquireRequestState

Используя инструмент мониторинга производительности "Новая реликвия", я вижу случайные (но слишком много) длительные задержки в "AcquireRequestState". Я говорю о 10, 20 секундных задержках, иногда минутах.

Я знаю, что мы не написали наши собственные обработчики событий для этого события.

Где я могу начать искать причину этих задержек? Маленькая информация, которую я нашел до сих пор на msdn, не помогла.

2 ответа

Моя команда увидела задержку "AcquireRequestState", о которой NewRelic сообщила ранее сегодня, когда у одного из наших приложений ASP.NET возникли проблемы с производительностью на определенной странице.

Основной причиной оказалось изменение хранимой процедуры, которую мы недавно развернули в нашей базе данных SQL Server, что непреднамеренно вызвало выполнение этой хранимой процедуры очень долго. Хранимая процедура была вызвана как часть отображения страницы с проблемой производительности.

Мы смогли решить эту проблему, выявив и исправив проблему с производительностью хранимой процедуры. Проблема "AcquireRequestState" от NewRelic оказалась неактуальной; это был признак проблемы, а не причина.

Это было в приложении ASP.NET 4.5, работающем в Windows Server 2008.

tl; dr: Задержка "AcquireRequestState", о которой сообщает NewRelic, может быть побочным эффектом какой-либо другой проблемы, которая приводит к длительной загрузке одной или нескольких страниц и / или запросов AJAX в вашем приложении ASP.NET.

Попробуйте применить исправление накопительный пакет 2828841 на сервере.

Выпуск 6

симптомы

Когда вы отправляете много одновременных запросов с одинаковым идентификатором SessionId в веб-приложение ASP.NET 4.5, некоторые запросы могут неожиданно зависнуть на этапе RequestAcquireState.

разрешение

После установки исправления исправление гарантирует, что событие EndRequest всегда будет запускаться.

Это исправление применяется к Windows 7 с пакетом обновления 1 (SP1), Windows Server 2008 R2 с пакетом обновления 1, Windows Server 2008 с пакетом обновления 2 (SP2) и Windows Vista с пакетом обновления 2 (SP2).

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

/questions/27691185/acquirerequeststate-vs-preexecuterequesthandler/49417150#49417150

В конечном счете, любой длительный процесс (в вашем случае сохраненное изменение процедуры) блокирует любые дальнейшие запросы для этого сеанса. Поскольку этот "блок" происходит в другой части конвейера IIS, NewRelic просто записывает его как "AcquireRequestState"

PS: я знаю, что этот ответ приходит довольно поздно, но я наконец нашел то, что решило подобную проблему для нас, и я подозреваю, что это поможет многим людям в будущем.

Другие вопросы по тегам