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

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

CPU Behaviour

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

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

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

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

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

  • xhr-polling: 767
  • websocket: 692
  • jsonppolling: 80

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

Ответ 1

Я не настолько опытен, но основными причинами задержки вашего процессора могут быть:

  • Время выполнения кода. Если у вас есть несколько циклов, посмотрите на меньшее количество данных, чтобы перевернуть/извлечь.
  • Параллельное подключение. У меня также была проблема с этим, человек может открыть 3-4 вкладки/окна браузера, чтобы попытаться сделать одно одновременное соединение для каждого пользователя NB. вы можете использовать сеансы

Я попытаюсь отредактировать этот ответ, если мне что-нибудь придет на ум, и вы можете увидеть ссылку ниже для стресс-тестов на сервере на Nodejs.

Ссылка здесь

Надеюсь, это поможет вам.