Многопоточное приложение и WebService
От: ivs13  
Дата: 25.01.11 13:30
Оценка:
Есть приложение, которое во множестве потоков подключается в WebService'у и дергает метод. Если приложение запустить на сервере, где расположен сам IIS (и где все это добро компилировалось), то все отрабатывает нормально. Но стоит запустить на другом компе — одновременно работают только 2 потока, остальные ждут. Пробовал запускать несколько экземпляров приложений: все равно в каждом экземпляров работает ровно два потока. В чем причина?
Re: Многопоточное приложение и WebService
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.01.11 14:32
Оценка: 1 (1)
Здравствуйте, ivs13, Вы писали:

I>Есть приложение, которое во множестве потоков подключается в WebService'у и дергает метод. Если приложение запустить на сервере, где расположен сам IIS (и где все это добро компилировалось), то все отрабатывает нормально. Но стоит запустить на другом компе — одновременно работают только 2 потока, остальные ждут. Пробовал запускать несколько экземпляров приложений: все равно в каждом экземпляров работает ровно два потока. В чем причина?

В ограничении на количество активных соединений к одному хосту.
См. http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx.
Его шевелить не рекомендую — лучше найти ServicePoint для своего веб-сервиса и настроить конкретно его:
и http://msdn.microsoft.com/en-us/library/system.net.servicepoint.connectionlimit.aspx
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Многопоточное приложение и WebService
От: ivs13  
Дата: 26.01.11 14:53
Оценка:
Спасибо, вроде получилось. С ServicePoint как-то через раз получалось, сделал через ServicePointManager. Причем выставлять параметры, как оказалось, нужно обязательно в основном потоке программы, изменения в потоках, созданных непосредственно для работы, никакого эффекта не дали, хоть и делались до создания экземпляров вебсервиса. Теперь проявилась другая проблема: ограниченно количество одновременных подключений к вебсервису (опытным путем установил — 25 удаленно или 50 локально). Что нужно подкрутить в ASP.NET WebService, чтобы избавиться от ограничений?
Re[3]: Многопоточное приложение и WebService
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.01.11 14:59
Оценка:
Здравствуйте, ivs13, Вы писали:

I>Спасибо, вроде получилось. С ServicePoint как-то через раз получалось, сделал через ServicePointManager. Причем выставлять параметры, как оказалось, нужно обязательно в основном потоке программы, изменения в потоках, созданных непосредственно для работы, никакого эффекта не дали, хоть и делались до создания экземпляров вебсервиса. Теперь проявилась другая проблема: ограниченно количество одновременных подключений к вебсервису (опытным путем установил — 25 удаленно или 50 локально). Что нужно подкрутить в ASP.NET WebService, чтобы избавиться от ограничений?

Вы наступили на ограничение на пул потоков ASP.NET.
Корректировать его без веской причины не рекомендую. Зачем вам удерживать открытые соединения? Работа веб-сервиса — быстро-быстро обслужить и закрыть соединение. Всё равно работать одновременно может не больше потоков, чем ядер. Ну, часть времени обработчик, конечно же, спит. Поэтому ASP.NET выделяет 25 потоков на ядро, а не один.
Подкрутить в вебсервисе лучше его производительность
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Многопоточное приложение и WebService
От: ivs13  
Дата: 26.01.11 15:19
Оценка:
Вебсервис используется как шлюз для доступа к базе данных, особой логикой не обладает, все зависит от того, как быстро БД, которая крутится на другом сервере, даст ответ. Т.е. речь идет не о реальной работе, а о простом ожидании, нагрузки никакой. Подскажите, куда ковырять с этим пулом, не получится — так и будет, хоть наковыряюсь
Re[5]: Многопоточное приложение и WebService
От: henson Россия http://www.njt-rails.com
Дата: 26.01.11 18:56
Оценка:
Здравствуйте, ivs13, Вы писали:

I>Вебсервис используется как шлюз для доступа к базе данных, особой логикой не обладает, все зависит от того, как быстро БД, которая крутится на другом сервере, даст ответ. Т.е. речь идет не о реальной работе, а о простом ожидании, нагрузки никакой. Подскажите, куда ковырять с этим пулом, не получится — так и будет, хоть наковыряюсь


Может асинхронные вызовы помогут?
Re[5]: Многопоточное приложение и WebService
От: Lloyd Россия  
Дата: 27.01.11 07:29
Оценка:
Здравствуйте, ivs13, Вы писали:

I>Вебсервис используется как шлюз для доступа к базе данных, особой логикой не обладает, все зависит от того, как быстро БД, которая крутится на другом сервере, даст ответ. Т.е. речь идет не о реальной работе, а о простом ожидании, нагрузки никакой. Подскажите, куда ковырять с этим пулом, не получится — так и будет, хоть наковыряюсь


А какой смысл запскать для такого запроса отдельный поток, если он все равно будет ждать? Недостатки — очевидны (рсурсы на поток, соединение с базой данных), а вот достоинств как-то не видно.
Re[6]: Многопоточное приложение и WebService
От: ivs13  
Дата: 27.01.11 09:47
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>А какой смысл запскать для такого запроса отдельный поток, если он все равно будет ждать? Недостатки — очевидны (рсурсы на поток, соединение с базой данных), а вот достоинств как-то не видно.

Не совсем понял... На веб-сервисе никаких потоков не запускается. У него всего одна функция, принимающая имя хранимой процедуры и список входных параметров, дергающая БД и возвращающая список выходных параметров. Все. Проблемы начинаются на тестовом клиенте, которым я попытался сэмулировать нагрузку на веб-сервис. Это и позволило выявить ограничение в 25 одновременных подключений к веб-сервису. Теперь вопрос: как заставить веб-сервис отрабатывать без ограничений, создавая столько подключений к БД, сколько нужно мне, сколько выдержит сервер, а не 25, указанные Микрософтом? А вот чтобы моей БД не стало плохо, я регулирую кол-во подключений к ней через параметры ConnectionString.
Re[7]: Многопоточное приложение и WebService
От: Lloyd Россия  
Дата: 27.01.11 09:55
Оценка:
Здравствуйте, ivs13, Вы писали:

L>>А какой смысл запскать для такого запроса отдельный поток, если он все равно будет ждать? Недостатки — очевидны (рсурсы на поток, соединение с базой данных), а вот достоинств как-то не видно.


I>Не совсем понял... На веб-сервисе никаких потоков не запускается. У него всего одна функция, принимающая имя хранимой процедуры и список входных параметров, дергающая БД и возвращающая список выходных параметров. Все. Проблемы начинаются на тестовом клиенте, которым я попытался сэмулировать нагрузку на веб-сервис. Это и позволило выявить ограничение в 25 одновременных подключений к веб-сервису.


Вы неправильно поняли, что вам ответил Sinclair.

Количество соединений к веб-сервису не ограничено 25-ю. Просто все запросы ставятся в очередь на выполнение и будут обрабатываться тогда, когда освободится поток, который сможет их обработать. А кол-во потоков по умолчанию как раз 25.

I>Теперь вопрос: как заставить веб-сервис отрабатывать без ограничений, создавая столько подключений к БД, сколько нужно мне, сколько выдержит сервер, а не 25, указанные Микрософтом? А вот чтобы моей БД не стало плохо, я регулирую кол-во подключений к ней через параметры ConnectionString.


Если честно, я не понимаю, чего вы хотите добиться. Если у вас и так ограничено кол-во подклюний к базе, то увелиением числа потоков сверх 25-и вы добьетесь только дополнительного расхода памяти и только.
Re[6]: Многопоточное приложение и WebService
От: AK107  
Дата: 27.01.11 09:56
Оценка:
Здравствуйте, Lloyd, Вы писали:

I>>Вебсервис используется как шлюз для доступа к базе данных, особой логикой не обладает, все зависит от того, как быстро БД, которая крутится на другом сервере, даст ответ. Т.е. речь идет не о реальной работе, а о простом ожидании, нагрузки никакой. Подскажите, куда ковырять с этим пулом, не получится — так и будет, хоть наковыряюсь


L>А какой смысл запскать для такого запроса отдельный поток, если он все равно будет ждать? Недостатки — очевидны (рсурсы на поток, соединение с базой данных), а вот достоинств как-то не видно.



у меня похожая проблема: устраиваю стресс-тест для вебслужбы проксирующейь запросы к БД. время исполнения одного запроса от сотых долей до секунды. исходя из задачи на чем стоит сосредоточиться если количество клиентов в момент времени может быть > 1000? какие вообще есть рекомендации по разработке похожих служб?
Re[8]: Многопоточное приложение и WebService
От: ivs13  
Дата: 27.01.11 11:03
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Если честно, я не понимаю, чего вы хотите добиться. Если у вас и так ограничено кол-во подклюний к базе, то увелиением числа потоков сверх 25-и вы добьетесь только дополнительного расхода памяти и только.


База данных позволяет создавать 1000 одновременных подключений (проверено текущим сервером приложений). А веб-сервер не пускает больше 25. Как сделать, чтобы веб-сервис позволял создавать 1000 одновременных подключений к БД? Надеюсь, теперь стало понятней.
Re[9]: Многопоточное приложение и WebService
От: Lloyd Россия  
Дата: 27.01.11 11:23
Оценка: +1
Здравствуйте, ivs13, Вы писали:

I>База данных позволяет создавать 1000 одновременных подключений (проверено текущим сервером приложений). А веб-сервер не пускает больше 25. Как сделать, чтобы веб-сервис позволял создавать 1000 одновременных подключений к БД? Надеюсь, теперь стало понятней.


Попробуйте параметр maxWorkerThreads элемента processModel.

Но по-моему, вы зря это делаете, 1000 подключений — это минимум 1GB памяти.
Re[10]: Многопоточное приложение и WebService
От: ivs13  
Дата: 27.01.11 16:43
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Попробуйте параметр maxWorkerThreads элемента processModel.

L>Но по-моему, вы зря это делаете, 1000 подключений — это минимум 1GB памяти.

Спасибо. Частично помогло. В документации написано "Значения этого атрибута находятся в диапазоне от 5 до 100". Презрев написанное, указал <processModel autoConfig="false" maxWorkerThreads="1000"/> в надежде получить вожделенную тысячу подключений. В результате опыт показал порядка 350 подключений (сожрав при этом 220Мб памяти). Уже больше, чем 25, но и не указанная тысяча. Что нужно подкручивать дальше?
Re[11]: Многопоточное приложение и WebService
От: Volgaboatman  
Дата: 28.01.11 08:54
Оценка:
Здравствуйте, ivs13, Вы писали:

I>Здравствуйте, Lloyd, Вы писали:


L>>Попробуйте параметр maxWorkerThreads элемента processModel.

L>>Но по-моему, вы зря это делаете, 1000 подключений — это минимум 1GB памяти.

I>Спасибо. Частично помогло. В документации написано "Значения этого атрибута находятся в диапазоне от 5 до 100". Презрев написанное, указал <processModel autoConfig="false" maxWorkerThreads="1000"/> в надежде получить вожделенную тысячу подключений. В результате опыт показал порядка 350 подключений (сожрав при этом 220Мб памяти). Уже больше, чем 25, но и не указанная тысяча. Что нужно подкручивать дальше?


А смысл ? В реальной жизни тратится какое-то время на обработку запроса самим сервером. И скорее всего просто упирается в производительность. Если задача получить 1000 подключений к sql — поставь 10 серверов у каждого по 100 подключений в ферму
... << RSDN@Home 1.2.0 alpha 4 rev. 1160>>
Re[12]: Многопоточное приложение и WebService
От: ivs13  
Дата: 28.01.11 09:14
Оценка:
Здравствуйте, Volgaboatman, Вы писали:

V> И скорее всего просто упирается в производительность.


Это не так. Загруженность и до 20% не доходит. Смысл? Смысл простой: от COM-сервера перейти к WebService. Пока все это тестовые задачи, которые, тем не менее, уже выявили проблемы: от того, что рядом стоящий COM делает даже не напрягаясь, ASP.NET WebService становится в позу
Re[13]: Многопоточное приложение и WebService
От: Volgaboatman  
Дата: 28.01.11 09:36
Оценка:
Здравствуйте, ivs13, Вы писали:

I>Здравствуйте, Volgaboatman, Вы писали:


V>> И скорее всего просто упирается в производительность.


I>Это не так. Загруженность и до 20% не доходит. Смысл? Смысл простой: от COM-сервера перейти к WebService. Пока все это тестовые задачи, которые, тем не менее, уже выявили проблемы: от того, что рядом стоящий COM делает даже не напрягаясь, ASP.NET WebService становится в позу


Дык оно по определению медленнее, зато удобнее.
... << RSDN@Home 1.2.0 alpha 4 rev. 1160>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.