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