У нас есть IIS 7, на котором запущено классическое приложение ASP, и в последнее время я заметил следующую проблему. В течение дня, если я смотрю на Server Node -> Worker Processes, некоторые запросы, кажется, заполняются там. Затраченное время - что-то сумасшедшее, например, 12 часов в конце дня. Все запросы находятся на этапе ExecuteRequestHandler.
Нет никакого способа, чтобы что-то выполнялось так долго, и я не могу воспроизвести проблему. Я пробовал сбросить файл w3wp.exe, используя FRT и прочие полезные вещи, но у меня есть несколько общих вопросов:
- Есть ли параметр, который контролирует КОГДА IIS останавливает запрос? Чтобы быть конкретным, в процессе разработки, если я намеренно проектирую страницу так, чтобы она была медленной (т.е. обновляла заблокированную таблицу SQL), а затем ЗАКРЫВАЛАСЬ из браузера и отслеживала запросы в IIS, я вижу, что запрос все еще находится там около 20 секунд до удаления. Это 20 секунд случайный интервал, или это можно где-то УСТАНОВИТЬ? Чтобы было ясно, это не значит, что страница занимает 20 секунд для выполнения, она будет выполняться вечно (в этом тестовом примере), но кажется, что IIS отказывается от нее через 20 секунд или около того после того, как я выхожу из системы.
- Есть ли способ увидеть "осиротевшие" запросы, И.Е. запросы в пуле приложений, которых больше никто не ждет
- Что еще я могу сделать, чтобы отладить это? В дампе w3wp говорится, что существуют клиентские соединения с состоянием HTTP-запроса HTR_READING_CLIENT_REQUEST.
- Я продолжаю получать предложения по изменению настроек конфигурации IIS, таких как AspRequestQueueMax, каждый раз, когда я пытаюсь найти их в ApplicationHost.config, я не вижу, чтобы эти элементы были установлены, поэтому либо я смотрю не в том месте, либо значение по умолчанию будет не должны быть явно указаны в конфиге. Это вызывает два вопроса: а) как вы ЧИТАЕТЕ эти значения конфигурации, т.е. получаете текущее значение, б) как вы их УСТАНАВЛИВАЕТ.