Tcp сервер не принимает соединение через определенное время

Я реализую tcp-сервер в nodejs, который принимает подключения от устройств GPS, и код отслеживается навсегда. Код не падает, но по истечении определенного времени сервер не принимает новые подключения. После перезапуска сервера он снова работает нормально. Я понятия не имею, что не так. ОС Ubuntu 14.04. Любая помощь приветствуется.

Редактировать:

Время, после которого сервер не принимает подключения, составляет около 6 дней.

net.createServer(function(sock){
    sock.on('data',function(data){
         //converting data to ascii.
         //parsing data,doing calculation
         //fetching user_id from redis.(i will get device id from gps device, there are user_id associated to device ids). 
         //posting to api using rest-client

    });
});

Изменить 2: Есть ли что-нибудь с размером виртуальной памяти. Размер виртуальной памяти составляет около 940 МБ.?

1 ответ

Решение

Я работал на основе однотипных систем, поэтому этот вопрос вызывает у меня некоторую ностальгию. Ваша проблема - дескриптор файла:

В Unix и связанных с ним компьютерных операционных системах дескриптор файла (FD, реже fildes) является абстрактным индикатором (дескриптором), используемым для доступа к файлу или другому ресурсу ввода / вывода, такому как канал или сетевое соединение.

Затем вам нужно увеличить лимит файловых дескрипторов на вашем сервере Linux следующим образом:

Отредактируйте файл параметров ядра /etc/sysctl.conf. Добавьте в него строку fs.file-max=[новое значение].

 vim /etc/sysctl.conf

 fs.file-max = 500000

Примените изменения:

sysctl -p

Чтобы изменить настройку ulimit, отредактируйте файл /etc/security/limits.conf и установите жесткие и мягкие ограничения.

vi /etc/security/limits.conf
* soft nofile 90000
* hard nofile 90000

Примените изменения:

reboot

Теперь протестируйте новые настройки системы, используя следующие команды:

#ulimit -a
open files (-n) 90000

Проверьте текущий предел дескриптора открытого файла:

# more /proc/sys/fs/file-max
500000

Совет 1: чтобы узнать, сколько файловых дескрипторов в настоящее время используется

# more /proc/sys/fs/file-nr

Совет 2: добавьте сопряжение, чтобы перезапускать сервер сокетов (приложение Node.js) каждую неделю. Надеюсь, поможет.

Другие вопросы по тегам