|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
Доброго времени суток. Имеется интерактивное web приложение(GWT, GWT RPC, JBOSS), в соответствиями с требованиями, задержек при получении сообщений с сервера быть не должно. Каждый клиент в цикле опрашивает сервер, при наличии сообщений они отдаются сразу и клиент делает новый запрос, при отсутствии сообщений, запрос удерживается до 5 секунд. Данная архитектура работает без проблем при небольшом количестве клиентов до 2000-2500 тысяч на односерверной конфигурации. При увеличении количества клиентов возникает проблема. В JBoss заканчиваются потоки обработчики, фактически получается что количество потоков обработчиков должно быть не менее количества активных клиентов. На тестовой машине OS X Yosemite возникает OutOfMemoryError: unable to create new native thread при 2000+ созданных потоков одним процессом (я так понял что это захардкожено на уровне ядра). В продакшене будет использоваться Cent OS и мы сможем обойти это ограничение, но есть подозрения что проявятся другие проблемы как минимум такие как нехватка памяти при увеличении количества потоков и открытых сокетов. Полагаем что 1 клиент = 1 открытое keep-alive соединение на сервере + 1 нативный поток обработчик. У заказчика есть требование поддержать несколько десятков тысяч активных клиентов. Собственно говоря вопросы - с какими проблемами можно столкнуться при увеличении количества потоков на сервере? В идеале хотелось бы понять сколько мы можем держать клиентов на одном сервере? Есть ли смысл переходить на WebSocket, т.е. будет ли ограниченное число потоков обработчиков, обрабатывать запросы по всем сокетам или связь будет 1 сокет = 1 поток обработчик? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 10:15 |
|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
nmkvВ JBoss заканчиваются потоки обработчикиNginx? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 10:41 |
|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
skyANA, Nginx бежит в качестве фронтенда на отдельной машине, с ним проблем не обнаружено. JBoss создает пул нативных потоков для обработки запросов, в данный момент проблема именно с ним. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 10:48 |
|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
nmkvДоброго времени суток. Имеется интерактивное web приложение(GWT, GWT RPC, JBOSS), в соответствиями с требованиями, задержек при получении сообщений с сервера быть не должно. Каждый клиент в цикле опрашивает сервер, при наличии сообщений они отдаются сразу и клиент делает новый запрос, при отсутствии сообщений, запрос удерживается до 5 секунд. ... Спасибо IMHO надо копать в сторону масштабирования и кластеризации. И закладывать ~2000 клиентов на ноду. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 11:09 |
|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
mad_nazgul, Почему именно ~2000 клиентов на ноду? На одной ноде можно поднять 4 инстанса JBoss, в этом случае ~8000? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 11:27 |
|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
nmkvНа тестовой машине OS X Yosemite возникает OutOfMemoryError: unable to create new native thread при 2000+ созданных потоков одним процессом (я так понял что это захардкожено на уровне ядра). Нет, это вычерпывается адресное пространство под стэки потоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 14:13 |
|
Long-Polling vs ???
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Странно, в таком случае наверное уменьшение размера памяти под стек, через ключ Xss как-то влияло. Но уменьшение с 1024k до 228k никак не влияет на максимальное количество создаваемых потоков, одним процессом. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 16:12 |
|
|
start [/forum/topic.php?fid=33&msg=38995654&tid=1547469]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 535ms |
0 / 0 |