Вопрос: Как отлаживать проблемы с процессором Node + Socket.io


У нас запущен сервер Node Socket.io с Express 3. Сервер контролируется с использованием навсегда, Сервис работает хорошо, но процессор растет в течение дня, пока он не достигнет 90% +, а затем внезапно опустится до ~ 20%, как показано на графиках ниже. Я считаю, что падение вызвано перезагрузкой приложения Forever.

CPU Behaviour

Я хотел бы знать это;

  • Каковы типичные факторы, которые могут привести к тому, что приложение Node.js будет вести себя так?
  • Какие инструменты / методы доступны для отладки утечек памяти / cpu hogging в узловых приложениях?

Я думаю, что это может быть связано с тем, что Socket.io не очищает ресурсы после отключения пользователей, хотя документы говорят, что Socket.io будет управлять этим автоматически.

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

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

  • xhr-опрос: 767
  • websocket: 692
  • jsonppolling: 80

Иногда мы можем быть на 100% процессоре с только 500 подключениями, в других случаях - 1500 подключений. Я знаю, что скорость отправки сообщений имеет большое влияние, однако ставка довольно последовательна.


5
2018-04-12 09:18


Источник


Вы когда-нибудь решали эту проблему, Стив? Я в одной лодке. - toblerpwn
К сожалению, не полностью. Я сделал много настроек для моего кода, чтобы оптимизировать его, например. не хранить большие объекты, избавиться от раздутого кода и т. д. Быть может, мои соединения намного выше, но график ЦП все еще делает очень странные вещи время от времени. Я также обновляю Socket.io и Node до последних версий, похоже, помогает. - SteveEdson
прямо, хорошо знать о версиях (СПАСИБО!). вы проверили ответ ниже? похоже, что @ user172220 решил эту проблему, рефакторинг, как socket.io и redis работают вместе, но метод для его ответа не совсем ясен для относительного новичка JS, подобного мне. - toblerpwn


Ответы:


У меня точно такая же проблема, грустно, что у нас нет никаких предложений для нас ...

вот моя проблема объясняется node.js, mongodb, redis, при деградации производительности ubuntu в производстве, оперативная память бесплатна, CPU 100%


2
2018-05-03 10:54