Мы запускаем сервер Node Socket.io с Express 3. Сервер контролируется с помощью Forever. Сервис работает хорошо, но процессор растет в течение дня, пока он не достигнет 90% +, а затем внезапно опустится до ~ 20%, как показано на графиках ниже. Я считаю, что это падение вызвано перезагрузкой приложения Forever.
Я хотел бы знать:
- Каковы типичные факторы, которые могут привести к тому, что приложение Node.js ведет себя так?
- Какие инструменты/методы доступны для отладки утечек памяти /cpu hogging в Node приложениях?
Я думаю, что это может быть связано с тем, что Socket.io не очищает ресурсы после отключения пользователей, хотя документы говорят, что Socket.io будет управлять этим автоматически.
Любая помощь будет принята с большой благодарностью, эта проблема затрудняет управление нашим сервером. Я опубликовал этот вопрос на Serverfault неделю назад, но не получил ответа, поэтому я думаю, что здесь может быть лучше.
Обновление:. После дополнительных исследований оказалось, что ЦП напрямую не коррелирует с количеством подключений. Наша критическая масса, по-видимому, составляет около 1500 одновременных соединений, разделенных так:
- xhr-polling: 767
- websocket: 692
- jsonppolling: 80
Иногда мы могли быть на 100% процессоре с только 500 подключениями, а иногда и 1500 подключений. Я знаю, что скорость отправки сообщений имеет большое влияние, однако скорость довольно непротиворечива.