Russian Qt Forum

Qt => Работа с сетью => Тема начата: garryHotDog от Октябрь 07, 2010, 20:09



Название: Проблема коннекта к серверу под нагрузкой
Отправлено: garryHotDog от Октябрь 07, 2010, 20:09
Для более ясной картины опишу что за сервер и как работает (Это линуксовый сервак для раздачи файлов)

- qtcpserver
- qtcpsocket (используются асинхронный режим работы - не блокирующийся)
- qt462
- ubuntu 9.10
- qtcreator

Алгоритм работы:

1. К серваку подключается клиент - я создаю новый сокет для работы с клиентом (напомню сокет асинхронный).
2. Когда приходит запрос от клиента на закачку файла - нахожу это файл или его часть в рабочей директории (в данном случае это другой сервак - т.к. файлов там на 100Gb)
3. "Отдаю" файл или его часть клиенту - и отключаюсь от него.

В чем проблема:
через некоторое время  - время коннекта к серваку (например по telnet) сильно возрастает или невозможно подключиться к нему вообще..

Предположения:
 - возрастает кол-во клиентов (хотя это не должно вешать)
 - из за того что файлы для раздачи находятся на удаленном серваке (т.е. сначало я их качаю - потом раздаю клиенту)
 - ну еще идея что пока один сокет читает данные из файлы - другие блокируются!


Жду от форумчан каких нибудь соображений по этой проблемке! Заранее спасибо!


Название: Re: Проблема коннекта к серверу под нагрузкой
Отправлено: merke от Октябрь 08, 2010, 07:40
Знакомая проблема! Запросы становятся в очередь. Решение использовать многопоточность! QThread!!!


Название: Re: Проблема коннекта к серверу под нагрузкой
Отправлено: garryHotDog от Октябрь 08, 2010, 09:09
как вариант - я уже написал многопоточную версию...но проблема в том что в Линуксе поток очень тяжелый объект поэтому приходится ограничивать их....а для заказчика - ограничение клиентов - большая беда....может кто нибудь знает как уменьшить размер потока (используемой памяти) в Линуке.... пробовал изменять размер стека - не особо помогло!


Название: Re: Проблема коннекта к серверу под нагрузкой
Отправлено: Barmaglodd от Октябрь 08, 2010, 11:50
Сделай не "один поток-одно соединение", а "один поток-несколько соединений". Разбивай файл на маленькие кусочки, чтобы остальные клиенты имели возможность обработаться, вынеси загрузку файла в отдельный поток.
Ну и традиционная бестолковая рекомендация: "Надо было использовать соответствующие инструменты, а не Qt".


Название: Re: Проблема коннекта к серверу под нагрузкой
Отправлено: navrocky от Октябрь 08, 2010, 15:07
но проблема в том что в Линуксе поток очень тяжелый объект....

Хм, первый раз об этом слышу, можно поподробнее? Что в нем такого тяжелого


Название: Re: Проблема коннекта к серверу под нагрузкой
Отправлено: garryHotDog от Октябрь 08, 2010, 18:13
Да я сам особо не понимаю, просто создай например 100-300 потоков и запусти их (например посылать данные на сервер) и посмотри сколько памяти хавается!