Иногда IIS недостаточно использует многоядерный процессор - PullRequest
1 голос
/ 08 ноября 2010

Я столкнулся со странным поведением моего приложения ASP.Net на сервере (IIS7 на Windows Server 2008 x64, процессор Xeon Quad).

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

При нагрузочном тестировании возникает следующее явление: IIS7 использует процессор не более чем на 25% и не для миране хочу использовать это больше.Эти 25% равны одному ядру, но распределены по всем четырем согласно вкладке производительности диспетчера задач.На другом компьютере (IIS7, Win 7, Quad) все работает так же, как и должно: процессор используется на все 100%.

Для каждого из вариантов поведения (пиковая загрузка 25% и 100% на 4-ядерных процессорах) я обнаружил на 2 компьютерах.Подобная ситуация описана здесь .Что может вызвать такое поведение?

Ответы [ 5 ]

2 голосов
/ 08 ноября 2010

Эти 25% равны одному ядру, но распределены по всем четырем согласно вкладке производительности диспетчера задач.

Проверка реальности: при использовании одного ядра планировщик ЦПпереместит нагрузку между ядрами до 2008 R2.Начиная с 2008 R2, он будет держать его на одном ядре, чтобы фактически перевести другие ядра в глубокий сон.

Итак, вы видите, что в основном это приложение, использующее одно ядро ​​ЦП.Точка.

Что может вызвать такое поведение?

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

Во время нагрузочного тестирования ... вы принимаете / сохраняете cookie сеанса (например, ONE), а на странице asp.net у вас включено состояние сеанса?Это будет сериализовать все запросы страниц к одному сеансу в памяти и является одним из наиболее вероятных виновников.Другой делает «глупые» вещи в коде, приводя к результату в блоке, и делает алгоритм эффективно однопоточным - но это невозможно оценить без гораздо большей информации о том, как вы программируете и что эффективно делаете.Например, я видел, как однажды несколько обезьян кодировали интернет-магазин, используя ОДНО соединение с базой данных (чтобы не перегружать базу данных), которое было сохранено в объекте приложения, и используя там методы блокировки / разблокировки, чтобы эффективно превратить их приложение asp в однопоточное.вещь.Это было очевидно - но есть много других вещей, которые могут пойти не так.Вопросы в основном следующие:

  • Вы по сценарию конфигурации / тестирования делаете что-то для принудительной сериализации IIS (что может быть в настройках веб-фермерства или при неправильном использовании состояния сеанса)?
  • Делаете ли вы что-нибудь на страницах, которые эффективно блокируют их в однопоточном режиме?

IIS per se отвечает на запросы через рабочие элементы (т.е. использует много потоков), если только он не HA для их сериализации (только сеансы)когда-либо назначаются ОДНОМУ потоку за раз, поэтому второй запрос для того же сеанса сериализуется).

0 голосов
/ 15 апреля 2011

Проблема была решена после установки более новой ОС. « Windows Server 2008 Enterprise SP1 (c) 2009 » вместо « Windows Server 2008 Standard SP2 (c) 2007 ».

0 голосов
/ 10 ноября 2010

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

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

Удачи в поиске решения проблемы - обязательно сообщите нам об этом.что вы найдете!

0 голосов
/ 09 ноября 2010

Я понял, что на тех 2 компьютерах, где загрузка была 100%, была установлена ​​32-битная Windows.На тех же 2 компьютерах, где пиковая загрузка составила 25% - 64 бит.Но изменение настройки «Включить 32-битные приложения» = true не помогло.

0 голосов
/ 08 ноября 2010

Я сомневаюсь, что это распространено.Скорее всего, алгоритм не распараллелен и поэтому код выполняется в одном ядре.

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