2016-02-28 80 views
2

我在nodejs中实现了tcp服务器,它接受来自gps设备的连接并永久监视代码。代码不会崩溃,但是在某些时间之后,服务器不接受任何新连接。一旦我重新启动服务器,它再次正常工作。我不知道什么是错的。 OS Ubuntu 14.04。任何帮助表示赞赏。Tcp服务器在一定时间后不接受连接

编辑:

时间之后,服务器不接受连接是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。 ?

+0

'特定时间'是什么?你能用更简单的代码示例重现这个问题吗?你可以发布吗?很难找到解决方案,因为我们知道的比你更少 –

+0

@Matteo增加了代码和时间信息的输出行,之后连接正在接受 – user3508612

回答

0

我一直在研究相同类型的系统,所以这个问题对我有些怀念。你的问题是文件描述符:

在Unix和相关的计算机操作系统,文件描述符(FD, 不经常菲尔德斯)是用于 访问的文件或其他输入一个抽象的指标(手柄) /输出资源,如管道或网络连接。

然后,你需要增加这个文件描述符限制在你的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 

tip1:到找出多少文件描述符当前正在使用的

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

提示2:添加conjob您重新启动socket服务器(Node.js的应用程序),每星期。 希望它有帮助。

+0

谢谢@hector。没有任何解决方法,无需重新启动服务器。 – user3508612

+0

你的意思是更改文件描述符的限制?很不幸的是,不行 – HCarrasko