Длительные задержки в 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: я знаю, что этот ответ приходит довольно поздно, но я наконец нашел то, что решило подобную проблему для нас, и я подозреваю, что это поможет многим людям в будущем.