IIS7 перестает работать после 5 запросов - PullRequest
8 голосов
/ 19 января 2012

Вот моя проблема:

Меня только что привели в масштабный проект asp.net C #, и мне было поручено исправить некоторые проблемы с производительностью (не в моей области знаний). В частности, после 5-7 переадресаций / вызовов ajax веб-сервер перестает отвечать, и вся страница (и, в конечном итоге, браузер) зависает.

Я не думаю, что это проблема кодирования, поскольку я установил точки останова на нескольких страницах (метод Page_Load), и после 5 запросов он даже не достигает точек останова.

Не думаю, что это связано с этой проблемой , так как я увеличил максимальное количество подключений браузера к параметру сервера и у меня такое же поведение. Кроме того, после этих 5 запросов в одном браузере IE приложение перестает работать и в FF.

Это не проблема с ресурсами, поскольку процесс w3wp.exe никогда не превышает 500 МБ памяти.

Одна вещь, которую я заметил при использовании Fiddler и других инструментов для мониторинга запросов, это то, что сервер загружает файлы изображений очень долго (png, jpg). Я не знаю, относится ли это к делу.

Я включил отслеживание неудачных запросов на сервере, и единственное, что я заметил, это то, что некоторые запросы не выполняются с ошибкой 401, даже если я включил анонимную аутентификацию. Вот точное сообщение

MODULE_SET_RESPONSE_ERROR_STATUS 

 ModuleName     ManagedPipelineHandler 

 Notification   128 
 HttpStatus     401 
 HttpReason     Unauthorized 
 HttpSubStatus  0 
 ErrorCode      0 

 ConfigExceptionInfo

 Notification   EXECUTE_REQUEST_HANDLER

 ErrorCode       The operation completed successfully. (0x0)

Это сообщение иногда выдается с ModuleName: ScriptModule

Я уже потратил 2 дня на эту вещь, и у меня заканчиваются идеи, поэтому любые предложения будут оценены.

Ответы [ 4 ]

4 голосов
/ 19 января 2012

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

Оттуда я буду пытаться реплицировать длительные процессы на стороне сервера, создавая изолированные тесты на стороне клиента - возможно, если URL-адреса являются HTTP-запросами, я бы тестировал те же URL-адреса по отдельности. Если бы это были сообщения HTTP, я бы создал изолированную тестовую форму, если это возможно, чтобы увидеть, что происходит с каждым запросом. Если длительный процесс на стороне сервера найден, у вас есть отправная точка.

Если долго не выполняются процессы на стороне сервера, то это может быть связано с проблемами кодирования на стороне JavaScript / клиента. Но определенно, когда вы работаете с большим, незнакомым проектом, лучше всего разобраться, как разбить проблему на более мелкие компоненты, которые затем можно протестировать

2 голосов
/ 06 февраля 2012

Я наконец решил проблему.Вот что я сделал:

  1. Экспериментировал с настройками IIS и утилизацией App_Pool и заметил, что нет ничего плохого в том, как он обрабатывает запросы, которые на самом деле его достигают.1007 *

    Я сосредоточился на модуле Http.sys и заметил, что в файлах журналов было много ошибок Timer_ConnectionIdle и Client_Reset.

  2. После еще нескольких экспериментов и большого количестваПоиски в Google, я случайно нашел этот ответ , и это решило мою проблему.Как следует из ответа, проблема была вызвана антивирусом AVG, установленным и неправильно настроенным на сервере.

Спасибо за помощь и предложения.

0 голосов
/ 19 января 2012

Просто добавляю ответ Шана, который является хорошим.

Во-первых, очевидно, существует проблема с кодом, поскольку это ни в коем случае не является "нормальным" поведением для IIS.

Тем не менее, вы должны изолировать его, как указано Шаном. Например, если сам сервер больше не принимает подключения, тогда мы вполне можем исключить javascript как источник проблемы и объявить его просто симптомом.

Обычно, когда рабочий процесс вращается в пространстве, подобном этому, это происходит либо из-за бесконечного цикла, либо из-за проблемы, когда несколько потоков пытаются заблокировать один и тот же ресурс. Бьюсь об заклад, если вы дадите ему поработать достаточно долго, сам IIS отключит и перезапустит процесс.

Имея это в виду, вы хотите искать любой тип многопоточного мусора (который я настоятельно рекомендую вам не делать на веб-сервере) или что-либо, что указывает на жесткий бесконечный цикл. Цикл станет очевидным, если вы выполните запросы индивидуально. Многопоточная проблема будет отображаться только в том случае, если вам случится столкновение.

Запуск различных счетчиков производительности на веб-сервере. Кроме того, как только он заперся, оставьте его на некоторое время. Как только IIS выполнит собственный сброс рабочего процесса, поищите индикаторы в журнале событий.

0 голосов
/ 19 января 2012

Если вызовы ajax вызывают зависание вашего браузера, убедитесь, что они не являются blocking вызовами ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...