nodejs应用程序中未处理的错误EMFILE

时间:2014-05-11 11:43:23

标签: node.js express

在谷歌上搜索我发现这意味着打开了太多文件,但我已经检查过,但是没有这个服务器正在运行。有人请帮助我。

events.js:72个
        扔掉//未处理的错误'事件
              ^
    错误:听EMFILE
        在errnoException(net.js:904:11)
        在Server._listen2(net.js:1023:19)
        在听(net.js:1064:10)
        在Server.listen(net.js:1138:5)
        在Function.app.listen(/home/kkcorps/Desktop/check/node_modules/express/lib/application.js:529:24)
    在对象。 (/home/kkcorps/Desktop/check/port_2.js:48:5)
    在Module._compile(module.js:456:26)
    在Object.Module._extensions..js(module.js:474:10)
    在Module.load(module.js:356:32)
    在Function.Module._load(module.js:312:12)

这是我的代码:

var express = require('express');
var path = require('path');

var app = express();

app.configure(function(){
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.static('static'));
    app.set('view engine', 'hbs');
    app.set('views', path.join(__dirname, 'views'));
});

var net = require('net');
var port = 1;
var timeout = 2000;
var open_ports = [];
while(port < 10000)
{
    (function(port){
    var sckt = new net.Socket();
    sckt.setTimeout(timeout, function(){
        sckt.destroy();
    });
    sckt.connect(port,function(){
        console.log('connected to localhost on port: '+ port);
        open_ports.push(port);
        //client.write('connected to localhost');
    });
    sckt.on('error',function(e){
        sckt.destroy();
    });
    })(port);

    port++;
}

//open_ports = ['1','2','3'];
app.get('/', function(req, res){
    //res.send('Hello world');
    res.render('index', {cont: open_ports});
})

app.listen(3000);
console.log('server running on port 3000');

1 个答案:

答案 0 :(得分:1)

“太多文件打开”=&gt; “打开的文件描述符太多”。套接字===文件描述符,所以这并不奇怪。您可以尝试两件事:调整ulimit -n(在基于Unix的系统上)或/和限制并发:一次打开10000个套接字听起来像个坏主意。 async.parallelLimit是实现这一目标的一种方式。