Когда нагрузка на IIS7 слишком велика? - PullRequest
5 голосов
/ 13 февраля 2010

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

В Flex это ошибка:

code = "NetConnection.Call.Failed"
description = "HTTP: Status 200"
details = "http://servername/weborb.aspx"
level = "error"

Состояние 200 не в порядке? Так что здесь не так? Это даже проблема IIS7? Из 200 кандидатов 20 получили это сообщение. При перезапуске их теста все работало хорошо.

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

Некоторые вопросы:

  • Может ли быть так, что IIS7 блокирует определенные вызовы http, когда нагрузка слишком велика?
  • Как узнать, что IIS7 заблокировал эти вызовы из-за слишком большой нагрузки?
  • Можно ли настроить эти вещи?

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

Приложение: Flex, WebORB, ASP.NET, IIS7 и SQLSERVER2008. Сервер - Windows Server 2008.

Ответы [ 4 ]

1 голос
/ 21 февраля 2010

Я предлагаю вам включить балансировку нагрузки между экземплярами IIS или рассмотреть возможность использования nginx для балансировки нагрузки.

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

Также установите время на большее число.

Также посмотрите на Comet, если вы пытаетесь вызвать последовательный результат, такой как живые данные (акции, погода, чат, чат)

1 голос
/ 13 февраля 2010

Есть много вещей, которые вы можете сделать, чтобы точно настроить производительность вашего сервера и IIS .

Чтобы ответить на ваши вопросы:

Максимальный предел одновременных подключений (плюс другие параметры) в IIS 7 можно настроить, выбрав свой веб-сайт в диспетчере IIS и выбрав «Дополнительные параметры» на панели действий справа. Хотя по умолчанию это число намного выше 200.

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

1 голос
/ 21 февраля 2010

Эта проблема мне кажется очень знакомой. У нас есть несколько гибких виджетов, которые подключены к одной стороне сервера, и иногда он также возвращает «Netconnection.Call.Failed». Для нас, кажется, что IIS (и MSSql позади) не может обработать все запросы вовремя, поэтому некоторые из них истекли. Попробуйте проверить, сколько времени занимает каждый запрос / все запросы, затем проверьте настройку времени ожидания.

0 голосов
/ 13 февраля 2010

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

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

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

...