powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / конвейеры обработки вызовов методов сервиса
8 сообщений из 8, страница 1 из 1
конвейеры обработки вызовов методов сервиса
    #36611777
Коляныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер.
Может кто-нибудь знает в деталях майкросовтовскую реализацию web-сервисов, точнее логику планировщика обработки входящих запросов? Есть некий веб метод, который ресурсов процессора не потребляет, но работает очень медленно - он производит запрос на внешний ресурс и дожидается ответа. Количество клиентов исчисляется тысячами, и если внешний ресурс начал затыкаться, то изредка происходит неприятная ситуация: количество параллельных подвисших на этом методе запросов переваливает некую критическую отметку и сервис перестаёт откликаться. При этом загрузка процессора по прежнему равна нулю.

Я попробовал смоделировать медленный метод таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    [WebMethod]
    public void Slow(int thread)
    {
        // логирование
        Thread.Sleep( 60000 );
        // логирование
    }

и запустил на клиенте сотню потоков, вызывающих этот метод. На тестовом сервере замечено поведение: обработка двух запросов начинается сразу, но 98 остальных выстраиваются в очередь, и очередные два начинают обрабатываться, как только обработались предыдущие два. Так и обрабатываются парами. На виртуальной машине (тот же 2003-й сервер и ASP.NET 2.0) поведение малость другое: изначально подхватилась обработка всё тех же первых двух потоков, но слудущий, третий, начал обрабатываться спустя всего секунду. Затем через секунду начал обрабатываться ещё один и т.д. То есть число конвейеров постоянно увеличивалось и остановилось на отметке 24, следущий поток был допущен только после освобождения одного из первых.

Может подскажете где настраиваются эти значения (в одном случае максимум 2, в другом максимум 24)? На вкладках AppPool'ов ничего полезного не нашёл. И таймаут в 1 секунду до выделения следущего конвейера (не называю его потоком, чтобы с соответствующим kernel-object'ом путаницы не возникло) можно ли убрать или поставить поменьше? Вообще если в логику выделения этих ресурсов можно как-нибудь залезть и написать несложные правила каким запросам сразу выделять новый конвейер, а какие пусть ждут, то подскажите куда копать, плиз.

Извиняюсь за объем.
Спасибо
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36611818
Коляныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажись раскопал частично. В machine.config такая запись
Код: plaintext
1.
<processModel autoConfig="false" minWorkerThreads="30" maxWorkerThreads="100"/>
Позволяет стартануть одновременно тридцати запросам и каждую секунду число одновременных обработчиков увеличивается на единицу.
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36612922
Коляныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие-то странности. На домашней конфигурации настройка machine.config processModel помогла, на рабочей тестовой среде с этими значениями снова только два параллельно отрабатывают, третий и остальные ждут пока кто-то из предыдущих освободится. В чём может быть ещё проблема, может как-нибудь можно диангостику провести?
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36613076
Коляныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то тема уже больше на персональный блог будет похожа.
В общем нашёл где затык: это КЛИЕНТ у меня почему-то не может пропихнуть больше двух одновременных вызовов на удалённый сервис (на localhost - нормально засылает). Если запускаю десять экземпляров одного клиента, то каждый из десяти пуляет по два запроса и ждёт их ответа, на сервер соответственно приходит двадцать одновременных. Возможно, какая-то дот-нетовская особенность работы WebReference.
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36613409
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коляныч,

ааааа так ты про это речь вел : ) только после 4 постов стало понятно о чем твой блог.

так модель поведения wcf службы определяется не <processModel autoConfig="false" minWorkerThreads="30" maxWorkerThreads="100"/>


а совсем другими параметрами :)
блин я до сих пор не уверен, что понял из твоего блога, о чем ты вещаешь .
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36613421
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у него asmx
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36613730
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что? какое развитие?
...
Рейтинг: 0 / 0
конвейеры обработки вызовов методов сервиса
    #36613807
Коляныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKКоляныч,

ааааа так ты про это речь вел : ) только после 4 постов стало понятно о чем твой блог.


Спасибо за участие :)

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

Winnipuhи что? какое развитие?

Развитие будет завтра. Кажетстя, уже известно в чём проблема - нужно INTERNET_OPTION_MAX_CONNS_PER_SERVER в клиентском приложении побольше поставить. Сервис, как выяснилось, вообще не является тонким местом, поэтому с разделом форума, похоже, что промахнулся.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / конвейеры обработки вызовов методов сервиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]