在谷歌上搜索我发现这意味着打开了太多文件,但我已经检查过,但是没有这个服务器正在运行。有人请帮助我。
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');
答案 0 :(得分:1)
“太多文件打开”=&gt; “打开的文件描述符太多”。套接字===文件描述符,所以这并不奇怪。您可以尝试两件事:调整ulimit -n
(在基于Unix的系统上)或/和限制并发:一次打开10000个套接字听起来像个坏主意。 async.parallelLimit
是实现这一目标的一种方式。