Tcp 服务器在一定时间后不接受连接

Tcp server not accepting connection after certain time

我正在 nodejs 中实现 tcp 服务器,它接受来自 gps 设备的连接,代码被永远监控。代码没有崩溃,但在一定时间后服务器不接受任何新连接。一旦我重新启动服务器,它就会再次正常工作。我不知道出了什么问题。 OS 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: 与虚拟内存的大小有什么关系。虚拟内存大小约为 940mb。 ?

我开发过同类型的系统,所以这个问题让我有些怀念。您的问题是 文件描述符:

In Unix and related computer operating systems, a file descriptor (FD, less frequently fildes) is an abstract indicator (handle) used to access a file or other input/output resource, such as a pipe or network connection.

然后,您需要在 linux 服务器中增加此 文件描述符限制 ,如下所示:

编辑内核参数文件/etc/sysctl.conf。添加行 fs.file-max=[new value] 到它。

 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:每周添加一个 conjob 以重新启动套接字服务器(Node.js 应用程序)。 希望对你有帮助。