высокая скорость процессора в IIS - PullRequest
1 голос
/ 30 декабря 2008

Я разрабатываю POS-приложение, которое имеет локальную базу данных на каждом POS-компьютере и взаимодействует с сервером с помощью WCF, размещенного в IIS. Приложение было развернуто у нескольких клиентов уже более года.

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

Я проверил монитор активности SQL и сетевой том, и они не показали существенной перегрузки сверх того, что мы обычно видим.

При проверке потоков в Process Explorer я видел множество потоков, неоднократно вызывающих CreateApplicationContext. Я пытался установить .Net 2.0 SP1, согласно некоторым сообщениям, которые я нашел в сети, но это не решило проблему и заменило вызовы функций CLRCreateManagedInstance.

Я собираюсь захватить дамп с помощью adplus и windbg процессов IIS и попытаться выяснить, в чем дело.

Кто-нибудь сталкивался с чем-то подобным или имеет представление, какой каталог мне следует проверить?

p.s. Та же версия приложения развернута у другого клиента, и там она работает просто отлично. Я также попытался откатить версии (даже очень старые версии), и он все еще ведет себя точно так же.

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

Ответы [ 4 ]

2 голосов
/ 03 апреля 2013

У нас была такая же проблема. Загрузка ЦП некоторых процессов пула приложений IIS была настолько высокой, что загрузка ЦП на веб-сервере составляла около 100%.

Сначала мы использовали DebugDiag и ProcMon, чтобы сузить проблему. Смотрите здесь: http://www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool

Мы нашли много сообщений "Этот поток ожидает в WaitOne" в анализе DebugDiag. Это указывало на то, что запросы по некоторым причинам ожидают друг друга. Итак, мы пошли искать общие ресурсы. Единственной, которую мы действительно могли найти, была база данных. Таким образом, мы решили, что несмотря на то, что веб-сервер загружен на 100%, настоящей проблемой должен быть сервер базы данных.

Мой коллега продолжил расследование дела. Он сделал следующие вещи:

1.) Настройка параллелизма SQL Server

Используя ProcMon на сервере базы данных, он обнаружил, что SQL Server использует слишком много блокировок и защелок. Посмотрите здесь: http://blog.sqlauthority.com/2011/02/06/sql-server-cxpacket-parallelism-usual-solution-wait-type-day-6-of-28/

Он установил число используемых процессоров в запросе на 4. Значение по умолчанию было 0 (что, я подозреваю, равно числу доступных процессоров - в нашем случае 24). Вы можете установить это с помощью SQL Management Studio, щелкнув правой кнопкой мыши на самом узле сервера и выбрав свойства.

Это оказало драматическое влияние, уменьшив количество защелок и ускорив запросы. Мы предполагаем, что SQL Server чрезмерно распараллеливал запросы, что приводило к слишком тяжелой синхронизации при их завершении.

2.) Создание новых и отсутствующих индексов в базе данных

На нашем сайте работало стороннее программное обеспечение для форумов, которое, как оказалось, вообще не использовало никаких индексов в своей базе данных. Мой коллега использовал полученные здесь знания: http://www.mssqltips.com/sqlservertip/1634/using-sql-server-dmvs-to-identify-missing-indexes/ для создания нескольких новых индексов.

Теперь дело, похоже, решено.

2 голосов
/ 31 декабря 2008

Обычно это не имеет ничего общего с аппаратным обеспечением и не связано с тем, как настроен IIS, в сочетании с некоторыми слегка долго выполняющимися запросами (более 100 миллисекунд).

В конфигурации пула приложений установите для своего веб-сада значение, равное 20 или более.

Настройка веб-сада - это в основном количество потоков, доступных для обработки запросов вашего приложения. Если установлено значение 1, то один запрос может блокировать обработку других запросов до его завершения.

У меня есть приложение, которое обрабатывает около 3,5 миллионов запросов в день. Когда для веб-сада было установлено значение 1, загрузка ЦП веб-сервера оставалась равной 100%, а количество запросов было отброшено. Когда я поднял его до 50, процессор веб-сервера упал до чуть менее 2%, и запросы не были сброшены.

1 голос
/ 30 декабря 2008

Если исходить из того, что происходит, и делать полное предположение, похоже, что может возникать своего рода исключение, исключение попадает в глобальный обработчик исключений в global.asax, а обработчик исключений также вызывает создание исключения и сбросить процесс. Это также может быть связано с тем, что антивирусная утилита блокирует некоторые файлы. Я мог бы быть WAY выключен, хотя.

0 голосов
/ 31 декабря 2008

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

...