Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 2
Регистрация: 04.06.2012
Сообщений: 99
1

Серьёзные лаги с вебсокетами под нагрузкой

24.04.2020, 23:09. Показов 1786. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть проект, в котором лайв-события реализованы на ws. По вечерам, когда онлайн вырастает до 5-6 тысяч, эмиты приходят с задержкой в 5-15 секунд, часто вразнобой. При этом ресурсы сервера задействованы на 20-50%, а интернет-канал загружен не более 10%.

Немного цифр:
Активных пользователей: 5500
RPS: 1500
TPS: Почти что 0
Event loop lag: 20-24ms
Если нужны ещё какие-то данные, могу добыть.



Из интересного. У меня часть эмитов отправляется через php - и они работают шустро и вообще без проблем.
А вот эмиты, отправленные напрямую с javascript на сервер node.js - тормозят.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2020, 23:09
Ответы с готовыми решениями:

ПК перезагружается под нагрузкой
Вообщем ситуация такая. У меня системник перезагружается примерно через 3-5 минут после запуска...

Пк перезагружается под нагрузкой
Товарищи хэлп! Уже пол года наблюдаю проблему, пк вылетает в бсод ,чаще всего проявляется при...

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

Перезагрузка под нагрузкой
Здравствуйте, компьютер куплен 3 дня назад. Под нагрузкой выключается то с ассорти bsodов, то...

6
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
27.04.2020, 01:06 2
LawrenceRUS, не силен в масштабировании websocketов, но сколько процессов ноды у вас запущено (т.е. используете ли cluster)?
0
394 / 289 / 109
Регистрация: 28.08.2013
Сообщений: 715
27.04.2020, 02:47 3
Без кода сложно что-то сказать, но есть несколько нюансов.
1. Приложение на Node.js очень быстрое (самое быстрое для скриптовых языков), но речь идёт о приложение написанном для чистого Node.js. Если используется Node.js + ExpressJs, то такое приложение значительно медленнее чем для чистого Node.js. Со временем ExpressJs стал "толстым" и медленным (хотя в большинстве случаем быстрее конкурентов).
2. Модуль WS не самое быстрое решение для работы с WebSocket'ом. Вот к примеру uWebSockets.
3. При не правильном использовании EventEmitter'a, может забиваться EventLoop, что может тормозить всё приложение.
1
2 / 2 / 2
Регистрация: 04.06.2012
Сообщений: 99
28.04.2020, 12:58  [ТС] 4
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
не силен в масштабировании websocketов, но сколько процессов ноды у вас запущено (т.е. используете ли cluster)?
Нет, не используется. Запущен один скрипт index.js, но в процессах висит 2 процесса (если это важно)
Разве Нода сама не распределяется по ядрам равномерно?
Цитата Сообщение от kidASM Посмотреть сообщение
Если используется Node.js + ExpressJs
К счастью, не использую експресс)
Цитата Сообщение от kidASM Посмотреть сообщение
2. Модуль WS не самое быстрое решение для работы с WebSocket'ом. Вот к примеру uWebSockets.
Возьму на заметку, спасибо.
Цитата Сообщение от kidASM Посмотреть сообщение
При не правильном использовании EventEmitter'a
А можно тут подробнее, что значит "правильно" и "неправильно"? В общих чертах.
0
2 / 2 / 2
Регистрация: 04.06.2012
Сообщений: 99
28.04.2020, 21:00  [ТС] 5
Проблема частично решена - выключил запись логов и нагрузка упала, и теперь выдерживается RPS до 2000-2200, после чего начинаются задержки по 3-10 секунд.
Но всё равно, на сколько я понимаю, это не предел возможности вебсокетов.
0
Coding is art
Эксперт JS
536 / 420 / 153
Регистрация: 04.09.2013
Сообщений: 1,057
29.04.2020, 22:13 6
запустите профайлер и нагрузите (имеется ввиду мануально, есть тулы для имитации деательности и т.п.), далее исследуйте логи профайлера и увидите какие функции занимают больше всего времени на выполнение..

Как уже подметили выше, без кода трудно что-то сказать.

Цитата Сообщение от LawrenceRUS Посмотреть сообщение
Разве Нода сама не распределяется по ядрам равномерно?
нет.

Цитата Сообщение от LawrenceRUS Посмотреть сообщение
А можно тут подробнее, что значит "правильно" и "неправильно"? В общих чертах.
допустим создавать такие условия когда в каждой обработке эвента происходит подписка на какой-то эвент (и потом не чиститься никак), хотя вы сказали что память не ростёт, значит тут чисто вычислительные операции (как запись в логи [тут не вычисление, а работа с файловой системой, что не быстро], так и например парсинг json или любые другие операции которые занимают много время (запись в базу, запросы на другие ресурсы и т.п.)).
см. начало сообщения, что бы понять как это можно найти.

ну и собственно можете (если приложение написано так, что это будет работать) запустить несколько раз вашу аппликацию в режиме форка (балансировки запросов на разные процессы) [pm2 и подобные тулы], это может помочь с производительностью.
0
2 / 2 / 2
Регистрация: 04.06.2012
Сообщений: 99
30.04.2020, 02:21  [ТС] 7
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
pm2 и подобные тулы
Как раз им и запускаю, и как мне кажется, он распределяет нагрузку по ядрам, но тут не уверен.

Цитата Сообщение от muxahuk1214 Посмотреть сообщение
Как уже подметили выше, без кода трудно что-то сказать.
Я могу покидать код, но точно не знаю, что именно интересно. По сути у меня через php обрабатываются разные конкретные действия пользователя, и потом php отправляет их на Ноду - это работает без проблем, видимо из-за того что таких действий не так много.
Но на js у каждого активного пользователя с интервалом в 2 секунды отправляется один эмит, передающий текущее состояние пользователя (проект это нечто вроде игры). Просто передаёт, без всяких вызовов в БД и прочих операций. И объём данных небольшой: 4-7 интовых значений и 2 текстовые строки длинною в 10-30 символов кириллицы. И вот этот эмит подвисает при высоком числе РПС. Пробовал и его вешать на php, но тогда в миг умер Апач))

Цитата Сообщение от muxahuk1214 Посмотреть сообщение
запустите профайлер
Вот это интересно. Не слышал про такую приблуду. Погуглю и применю, спасибо.
0
30.04.2020, 02:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2020, 02:21
Помогаю со студенческими работами здесь

Node.js под нагрузкой
Добрый день, посоветуйте плииз. Что происходит с NodeJS, если слишком много https запросов?...

Зависает компьютер под нагрузкой
В общем, при нагрузке на компьютер через некоторое время он зависает и не реагирует вообще ни на...

Сеть не работает под нагрузкой
Здравствуйте. Есть небольшой офис - машин около 20 +принтеров пара + кто-то телефон к вай-фай...

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

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

Зависание сайта под нагрузкой
Нужна помощь профессионалов 1С-Битрикс. Возникла проблема при переносе сайт на рабочий домен. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru