Приложение IIS7 ASP.NET - 2 идентичных приложения в 2 идентичных пулах приложений, 1 отзывчивое, 1 нет

12

У меня есть веб-приложение ASP.NET (v4.0), которое установлено в виртуальном каталоге (как приложение) и размещено в его собственном пуле приложений. Это повторяется для каждого экземпляра приложения (т.е. для каждого клиента).

Пулы приложений имеют интегрированный (не классический) режим, а для LoadUserProfile установлено значение true. В противном случае настройки по умолчанию.

Каждый экземпляр в настоящее время имеет свою собственную копию кода / конфигурации и свою собственную папку данных (основной файл для чтения / записи).

1 экземпляр этого приложения работает хорошо (операция, используемая для сравнения, занимает ~ 4 секунды). Каждый другой экземпляр работает медленно (от 10-25 секунд для той же операции).

Если я переместу более медленный экземпляр в «самый быстрый» пул приложений, этот экземпляр возродится. Если переместить более быстрый экземпляр в более медленный пул приложений, этот экземпляр замедлится до сканирования.

Первоначально пулы приложений создавались одинаково - вручную. Позже я использовал процедуру копирования powershell, чтобы обеспечить точное копирование более быстрого пула приложений и все то же поведение. Сравнение файлов apppool.config показывает, что они идентичны, за исключением назначений виртуальных каталогов.

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


источник
А папки приложений байт-идентичны?
USR
Да, только трижды проверил, но единственное отличие - в файле web.config, где он указывает имя виртуального каталога, в котором он находится (и я дважды проверил, что это единственное отличие). Каждый другой файл идентичен байту .
Что делает приложение, которое занимает больше времени в одном приложении? Можете ли вы подключить VS и приостановить отладчик для профилирования?
USR
Я не установил VS на сервер, так как это производственная система, но похоже, это моя следующая остановка. Я частично добавляю подробные подробные журналы к компонентам доступа к данным и доступа к файлам, так как трассировка, которую мы пока не показали, ничего конкретного. Я получу еще немного статистики и добавлю это как можно скорее - я был оптимистичен, что кто-то, возможно, столкнулся с подобным, чтобы я мог избежать этого пути
1
Поскольку вы загружаете профиль пользователя, это, кажется, ключевое различие между этими пулами приложений. Проверьте эти временные местоположения этих пользователей, разрешения на запись в файл и, если вы подключаетесь к базе данных, используя того же пользователя, то проверьте и права доступа к БД. Все, что требуется, - это запрос для тайм-аута для этого пользователя, поэтому по возможности тестируйте с той же БД. Удачи!

Ответы:

1

Чтобы дополнительно изолировать проблему, я бы предложил запустить Wireshark (или другой выбор анализатора пакетов) в хост-системе для двух сеансов. Я предполагаю, что каждому пулу приложений назначен уникальный IP-адрес или уникальный порт.

Сначала получите базовую производительность, отфильтровав порт IP: вашего пула быстрых приложений. Посмотрите, как выглядит трафик в и из приложения в «нормальных» условиях.

При втором запуске вам нужно будет захватывать трафик из медленного / не отвечающего пула приложений. Если вся сетевая маршрутизация и тому подобное верна до конца, вы должны видеть повторные запросы в одном направлении, скорее всего, к приложению из другого места, НО, если ваше приложение выполняет много запросов на другой сервер, ваш трафик может быть тяжелый на выходе вместо входа.

Этот тест покажет вам, связана ли проблема с приложением, или это проблемы, связанные с TCP / IP, которые приводят к истечению времени ожидания запросов к приложению из-за низкого / отсутствия связи.

Соотнесите временные метки ваших тестов с журналами событий сервера и (если применимо) журналами трассировки, и вы сможете сосредоточиться на проблеме.

Джордж Эрхард
источник
0

Отслеживание Failed Request (FRT) будет вашим лучшим инструментом для отслеживания этого. Он покажет конвейер и сколько времени потребовалось для завершения каждого шага. Это должно указать, является ли это чем-то внутри части asp.net или это что-то внутри самого конвейера IIS.

Чтобы настроить FRT, из IIS на уровне сайта создайте правило FRT с диапазоном http-статуса 200-999 и обязательно включите FRT (это отдельный шаг из области действий).

Затем воспроизведите проблему и посмотрите на сгенерированные файлы (% SystemDrive% \ inetpub \ logs \ FailedReqLogFiles \ w3svc {siteid}). Откройте их в Internet Explorer.

Скотт Форсайт - MVP
источник
0

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

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

Пожалуйста, оставьте свои выводы, мне любопытно.

PS Я также проверил бы разрешение имен и доступ к любым службам аутентификации, которые могут быть в игре. Например, если необходимо обратиться к серверу домена, убедитесь, что первым DNS-сервером в вашем списке является DNS-сервер для домена.

BigTFromAZ
источник
0

Это не решение, но мы будем работать над этим;

  1. Запустите IISRESET (в часы обслуживания) или убейте W3WP, который принадлежит пулу приложений, не отвечающему на запросы.

  2. Запустите приложение

  3. Пока он не отвечает, возьмите файл дампа W3WP, который принадлежит медленному пулу приложений. Используйте обозреватель процессов или диспетчер задач для создания файла дампа

  4. Возьмите mscordacwks.dll и mscorwks.dll из-под C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.XXXXX

  5. Zip и загрузить эти файлы куда-нибудь, откуда я могу скачать.

G33kKahuna
источник