Назад | Перейти на главную страницу

Периодически запросы IIS7 застревают в WindowsAuthenticationModule



У нас есть сервер IIS7, на котором размещено несколько десятков веб-сайтов. Некоторые из этих веб-сайтов являются частью того же старого приложения, которое мы разработали. Все эти сайты используют один и тот же код и работают в одном пуле приложений.

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

Это влияет только на один пул приложений, а не на другие на том же сервере. Пару раз, прежде чем перезапустить пул, я смотрел на выполняющиеся в данный момент запросы в рабочем процессе. Все они отображаются как выполняющиеся внутри модуля WindowsAuthenticationModule. Что странно, ведь подавляющее большинство приложений не требует аутентификации. Есть небольшой раздел администратора, который использует авторизацию Windows ... но все остальные запросы должны быть анонимными.


Кто-нибудь знает, что может быть причиной этого?

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

На некоторых из этих сайтов один и тот же физический каталог отображается на двух уровнях - как корень сайта и снова как приложение внутри сайта. Итак, если пользователь переходит на http://oursite.com/index.aspx, который отображается в c: \ files \ oursite \ index.aspx. Если пользователь переходит на http://oursite.com/foo/index.aspx, который также сопоставляется с c: \ files \ oursite \ index.aspx. Я думаю, что есть код, который смотрит на URL-адрес запроса и по-разному обрабатывает два запроса.

Это странно, потому что один и тот же файл web.config в конечном итоге интерпретируется как файл конфигурации сайта, а также как файл конфигурации приложения на сайте. Я не знаю, может ли это быть связано с проблемой аутентификации.


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


Что вы думаете?

Спасибо за вашу помощь,
Ричард

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

Либо:

  1. Откройте файл дампа в Visual Studio 2010
  2. В разделе «Параметры»> «Отладка» (или аналогичном) вы можете выбрать добавление серверов символов. Добавить http://msdl.microsoft.com/download/symbols
  3. Дважды щелкните место зависания и щелкните правой кнопкой мыши в трассировке стека и выберите загрузку кода / символов.
  4. Прочтите код и посмотрите, почему он завис

ИЛИ:

  1. следить эта статья для установки WinDbg
  2. Делайте то, что она делает, и посмотрите, сможете ли вы найти проблему
  3. Активируйте ведение журнала с помощью netsh, чтобы видеть запросы токенов Kerberos по мере их поступления (я не пробовал этот IRL):

    PS C:\> netsh trace show providers | select-string kerberos PS C:\> netsh trace show providers | select-string auth

    ... а потом что-то вроде:

    netsh trace start provider={5BBB6C18-AA45-49B1-A15F-085F7ED0AA90}

ИЛИ:

  1. Наймите консультанта. :)