Как проверить количество открытых соединений в node.js? - PullRequest
8 голосов
/ 09 июля 2010

У меня есть машина, на которой выполняется node.js (v0.1.32) с tcp-сервером (tcp.createServer) и http-сервером (http.createServer).HTTP-сервер подвергается воздействию длинных запросов на опрос (продолжительностью 50 секунд каждый) от приложения на основе кометы на порту 80. И с той же целью для подключения к порту 8080 имеются порты tcp от порта iphone.

Было обнаружено, что сервер некоторое время не мог обрабатывать больше соединений (особенно соединений tcp, в то время как соединения http выглядели нормально !! ??) и работал нормально только после перезапуска.

Для нагрузочного тестирования соединений я создал tcp-сервер и породил 2000 запросов и выяснил, что соединения начинают обрываться после достижения максимального значения дескриптора файла на компьютере (по умолчанию 1024).Что на самом деле очень мало.

Итак, здесь возникает вопрос новичка: как мне масштабировать мое приложение для обработки большего количества соединений на node.js и как я могу решить эту проблему.

Есть ли способ узнатьсколько активных соединений есть в данный момент?

Спасибо, Шариф

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

Привет, Джои!Я искал решение для Unix, которое помогло бы мне определить, сколько открытых соединений в данный момент в любой момент на моей машине.Причина была в том, что мой сервер не смог обработать запросы после определенного количества соединений.И решил, что моя машина может обрабатывать только 1024 открытых соединения одновременно, т.е. значение дескриптора файла ulimit, которое по умолчанию равно 1024. Я изменил это значение, установив ulimit -n, который соответствует моим требованиям.

Итак, для проверки открытых соединений я использовал lsof, который дает мне список открытых файлов и подсчитывает, сколько соединений открыто через каждый порт, который я использовал.

2 голосов
/ 14 июля 2010

Я не знаю, есть ли встроенный способ получения количества активных соединений с Node, но довольно легко что-то настроить.

Для моего приложения Node в стиле кометы я сохраняю объект, к которому добавляю соединения, как свойство. Каждые X секунд я перебираю этот объект и проверяю, есть ли какие-либо соединения, которые должны быть закрыты (в вашем случае, что-либо, превышающее ваш 50-секундный лимит).

Когда вы закрываете соединение, просто удалите это свойство из объекта соединения. Затем вы можете увидеть, сколько соединений открыто в любое время с помощью Object.size(connections)

...