Linux 内存泄漏会导致getaddrinfo EMFILE吗

Linux 内存泄漏会导致getaddrinfo EMFILE吗,linux,node.js,ubuntu,Linux,Node.js,Ubuntu,我的nodejsapi有点问题 有时,它返回,ConnectionError:getaddrinfo EMFILE,并且在此之后都是fuc** 所以,我开始调查。我发现这可能是由于“打开了许多文件描述符”。显然,我们可以增加授权打开的文件的数量,但这肯定不能解决问题 我在中发现,我们可以增加文件描述符设置和ulimit。但是有什么区别呢 然后,为了隔离我的问题,我运行了lsof-I-n-p | grep nodejs命令。事实上,建立的连接的数量正在增加,所以我想我的代码中有一些未关闭的连接 我

我的nodejsapi有点问题

有时,它返回,
ConnectionError:getaddrinfo EMFILE
,并且在此之后都是fuc**

所以,我开始调查。我发现这可能是由于“打开了许多文件描述符”。显然,我们可以增加授权打开的文件的数量,但这肯定不能解决问题

我在中发现,我们可以增加文件描述符设置和ulimit。但是有什么区别呢

然后,为了隔离我的问题,我运行了
lsof-I-n-p | grep nodejs
命令。事实上,建立的连接的数量正在增加,所以我想我的代码中有一些未关闭的连接

我有一些
fs.readFileSync
fs.readDirSync
等,但我没有设置
autoClose:true
。你以为会是这样吗

你有什么想法或建议吗

PS:该应用程序在Ubuntu机器上运行


编辑,2016年2月16日

我已经在我的生产机器上运行了这个命令
lsof-I-n-p|grep nodejs

我看到的是这样的:

...
nodejs    27596   root  631u  IPv4 109781565      0t0  TCP 127.0.0.1:45268->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  632u  IPv4 109782317      0t0  TCP 172.31.58.93:4242->172.31.55.229:61616 (ESTABLISHED)
nodejs    27596   root  633u  IPv4 109779882      0t0  TCP 127.0.0.1:45174->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  634u  IPv4 109779884      0t0  TCP 127.0.0.1:45175->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  635u  IPv4 109781569      0t0  TCP 127.0.0.1:45269->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  636u  IPv4 109781571      0t0  TCP 127.0.0.1:45270->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  637u  IPv4 109782319      0t0  TCP 127.0.0.1:45293->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  642u  IPv4 109781790      0t0  TCP 127.0.0.1:45283->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  643u  IPv4 109781794      0t0  TCP 127.0.0.1:45284->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  644u  IPv4 109781796      0t0  TCP 127.0.0.1:45285->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  645u  IPv4 109781798      0t0  TCP 172.31.58.93:4242->172.31.55.229:61602 (ESTABLISHED)
nodejs    27596   root  646u  IPv4 109781800      0t0  TCP 127.0.0.1:45286->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  647u  IPv4 109781802      0t0  TCP 172.31.58.93:4242->172.31.0.198:1527 (ESTABLISHED)
nodejs    27596   root  648u  IPv4 109781804      0t0  TCP 127.0.0.1:45287->127.0.0.1:7272 (ESTABLISHED)
nodejs    27596   root  649u  IPv4 109781806      0t0  TCP 127.0.0.1:45288->127.0.0.1:7272 (ESTABLISHED)
但我不知道这是什么意思,你有什么想法吗


非常感谢。

所以我想我知道发生了什么

我使用Redis和Redis session npm模块来存储购物车,但当我创建、更新时,每次在使用它之前,我都会创建一个到Redis的连接

var session = new Sessions({ port : conf.redisPort, host : conf.redisHost});

session.get({
    app :    rsapp,
    token :  this.sessionToken },
    function(err, resp) {
        // here some workin'
    })
现在,我只是在我的应用程序启动时创建了连接,并将其存储为一个单件,并在任何时候使用

// At the start of the App
    var NS = {
        sessions        : new RedisSessions({port: config.redisPort, host: config.redisHost}),
    };

// Later somewhere in the app        
    NS.session.get({
        app :    rsapp,
        token :  this.sessionToken },
        function(err, resp) {
            // here some workin'
        })

这很明显,但现在我发现了……如果它能帮助某人,我会将此标记为已解决。

你救了我一天