Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Распределённые приложения и сеть > WCF - торможения принятия запроса при 100 одноврем |
Автор: pasha1 15.5.2013, 16:13 | ||||||||
Добрый день!) Столкнулся со следующей проблемой, при одновременно посылке 100 запросов сервер начинает тормозить принятия нового запроса первые 100 запросов запускают функцию которая выполняется 1 минуту и ждут окончание выполнение, 101 запросом я посылаю с браузера вызов краткой функции которая выводит строку и количество сколько запросов еще работает паралельно. так вот после того как все 100 запросов принялись и работают в потоке, то 101 функция выполняется быстро и показывает что 100 потоков сейчас паралельно работают. Затык именно в приеме запросов, просмотрел очень много информации в интернете, все вроде делаю как надо но все равно результата нет использую NF 4.5 атрибуты класса установлены в паралельную работу Код C#
функция емуляции нагрузки на 1 минуту Код C#
функция проверки статистики Код C#
serviceThrottling установлен очень высокий Код C#
Надеюсь кто встречался с такой проблемой и подскажет в чем беда или хоть даст советы куда еще можно копать. |
Автор: pasha1 16.5.2013, 13:56 |
я не учел еще одного фактора это пул потоков ввода-вывода по умолчанию минимальный пул равен количеству ядер процесора, например у меня он был равен 4 максимальное значение было 1023, но почему же тогда возникали проблемы когда я пытался сделать 100 потоков??? ответ в том что когда мы переходим за минимальный порог, сервер не сразу выделяет новый поток, а ждет около 0,5 секунды что освободится один из занятых, и только после этого если свободного таки не нашлось выделяет новый поток.. теперь взяв во внимания что я делаю 100 подключений которые нужно держать, то первые 4 принимаются на обработку мгновенно, остальные 96 занимают приблизительно 96 * 0,5 сек = 48 секунд, то есть следующий 101 мой проверочный вызов ждет 48 секунд!!!. Это плохо, но это сделано не просто так, именно такое значение минимального пула обеспечивает хорошую стабильность, и чтобы начинающий программист не боролся сразу с демонами ему обеспечивают такие условия... решение: ThreadPool.SetMinThreads(4, 100); я уверен что мой ответ и мой труд будет кому то полезен, и не дать убить уйму времени ![]() полезные ссылки: http://blogs.msdn.com/b/wenlong/archive/2010/02/11/why-does-wcf-become-slow-after-being-idle-for-15-seconds.aspx http://msdn.microsoft.com/ru-ru/library/system.threading.threadpool.setminthreads.aspx http://stackoverflow.com/questions/7710220/wcf-performance-latency-and-scalability |