Конфликт, низкая производительность и взаимоблокировки при отправке запросов веб-службы из ASP.NET - PullRequest
1 голос
/ 24 марта 2011

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

Пул приложений «Default AppPool» превысил свои ограничения на задания.

Я нашел на этом сайте некоторую информацию http://support.microsoft.com/kb/821268,, которая выглядит многообещающей, ноМне нужна помощь в отношении значений параметров.

Я думаю о настройке этих параметров:

* maxWorkerThreads
* minWorkerThreads
* maxIoThreads
* minFreeThreads
* minLocalRequestFreeThreads
* maxconnection
* executionTimeout

Сначала говорится, что я должен сделать их в Machine.configm, но я не могу просто сделать их вWeb.config?

Во-вторых, какие будут рекомендованные настройки, чтобы решить мою проблему с конкуренцией?Мой (виртуальный) веб-сервер работает в следующей конфигурации системы:

enter image description here

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

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Ваша ссылка на KB относится только к версии 2.0 и более ранним версиям .NET Framework.

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

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

С точки зрения решения, один параметр, который имеет первостепенное значение, это maxConnection , который по умолчанию равен 2, что означает, что выможно одновременно совершать только 2 вызова веб-службы .

Также посмотрите this .

0 голосов
/ 24 марта 2011

Благодаря Aliostad и http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Threading Я теперь настроил свой Web.config и добавил следующие настройки:

<httpRuntime maxRequestLength="30000" minFreeThreads="88" minLocalRequestFreeThreads="76" />
<processModel maxIoThreads="100" maxWorkerThreads="100" />
<connectionManagement>
   <add address="*" maxconnection="48" />
</connectionManagement>

Это выглядит хорошо? Я не уверен, почему я добавил maxRequestLength = "30000", но так было некоторое время. Может ли быть проблемой, что она достигает 30000?

EDIT: Похоже, я не могу добавить тег tge processModel в мой Web.config, я получаю эту ошибку: enter image description here

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