Запросы веб-API в очереди навсегда на IIS (в состоянии: ExecuteRequestHandler)
В настоящее время я испытываю некоторые зависания в производственной среде, и после некоторого расследования я вижу много запросов в очереди в рабочем процессе пула приложений. Общеизвестно, что каждый запрос, находящийся в очереди в течение длительного времени, является запросом веб-API, в приложении я использую как MVC, так и веб-API.
Запросы ставятся в очередь примерно на 3 часа, когда пул приложений перезапускается, они сразу же начинают ставиться в очередь.
Все они находятся в состоянии ExecuteRequestHandler
Есть идеи, где мне продолжать копать?
2 ответа
Ваши запросы могут быть приостановлены по ряду причин:
- они ожидают ввода-вывода, например, базы данных, вызова веб-службы
- они зацикливаются или выполняют операции с большим набором данных
- интенсивные операции процессора
- некоторая комбинация вышеперечисленного
Чтобы выяснить, что делают ваши запросы, начните с получения URL-адресов запросов, занимающих много времени.
Вы можете сделать это в строке cmd следующим образом
c:\windows\system32\inetsrv\appcmd list requests
Если это не очевидно из URL-адресов и, глядя на код, вам нужно сделать дамп процесса w3wp.exe на сервере. Когда у вас есть дамп процесса, вам нужно будет загрузить его в windbg, чтобы проанализировать, что занимает все циклы процессора. Покрытие windbg довольно большое, но вот вкратце, что вам нужно сделать:
- загрузить SOS dll (расширение управляемой отладки)
- вызовите команду!runaway
- чтобы получить список длинных потоков, погрузитесь в длинный поток, выбрав его и вызвав команду!clrstack
Есть много блогов по использованию windbg. Вот один пример. Большим ресурсом по анализу подобных проблем является блог Тесс Феррандез.
Это действительно долгий путь без непосредственного доступа к вашей системе, но попробуйте проверить сопоставления обработчиков в графическом интерфейсе IIS Manager для вашего WebApi. Сравните это с настройками IIS вашего DEV или любого другого Env, где он работает.
Если это не проблема, сделайте сравнение всех других настроек IIS для этого приложения.
Удачи.