这是我的项目使用Node.js,Socket.io,RethinkDb
https://github.com/plever7/online-visitors-counter
一切都很顺利。但是如果我们在server.js中通过套接字有很多连接,我们就会收到错误。 5,10秒后代码本身再次成功运行。
ReqlDriverError: Failed to connect to localhost:28015
Full error:
{
"code": "EMFILE",
"errno": "EMFILE",
"syscall": "getaddrinfo"
}.
at Socket.<anonymous> (/root/node_modules/rethinkdbdash/lib/connection.js:89:12)
at Socket.g (events.js:180:16)
at Socket.emit (events.js:95:17)
at net.js:834:16
at process._tickCallback (node.js:442:13)
以上EMFILE表示,我达到了操作系统的文件描述符限制,但我认为还有另一个问题。以下是来自OS的信息:
the maximum number file handlers for entire system is: [root@socketio ~]# cat /proc/sys/fs/file-max 185294 current usage of handles: [root@socketio ~]# cat /proc/sys/fs/file-nr 4832 0 185294 The lsof output for 3 server.js process: [root@socketio ~]# lsof -p 4175 | wc -l 464 [root@socketio ~]# lsof -p 30071 | wc -l 1058 [root@socketio ~]# lsof -p 30084 | wc -l 1064 [root@socketio ~]# ulimit -Hn 65535 [root@socketio ~]# ulimit -Sn 65535