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

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

Пул приложений "Default AppPool" превысил свои ограничения на работу.

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

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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

Благодаря 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?

РЕДАКТИРОВАТЬ: Похоже, я не могу добавить тег tge processModel в мой Web.config, я получаю эту ошибку:

Другие вопросы по тегам