我在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。 ?
答案 0 :(得分:0)
我已经开始使用相同类型的系统,所以这个问题对我有些怀旧。您的问题是文件描述符:
在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
tip1:了解当前使用的文件描述符数量
# more /proc/sys/fs/file-nr
tip2:添加一个conjob,每周重启你的套接字服务器(Node.js应用程序)。 希望它有所帮助。