繁体   English   中英

Node.js node-mysql 错误:EMFILE,打开的文件太多

[英]Node.js node-mysql Error: EMFILE, Too many open files

我系统上的 ulimit 是 1024。我遇到过很多关于相同错误但没有具体答案的帖子。 我还想知道这是否是 node/node-mysql 问题,而不是与我的代码有关。 我将在这里发布我的代码片段:

exports.fn1  = function(req,res,host,user,password,database){
        var client = connectDB.connectDatabase(host,user,password,database);
                fn2();

    function fn2() {
        client.query(
            'select statement', args,
            function selectCb(error, result, fields) {
                if (error) {
                    console.log('ERROR');
                    client.end();
                    return;
                }
              
                if(not timeout) {
                    setTimeout(function(){
                                    
                                    fn2();
                               },5000);
                }
                
                else {
                    res.writeHead(200, {'Content-Type': 'text/plain'});
                    res.write(somedata);
                    res.end(); 
                    client.end();   
                }


        });
        }
    }
};

connectDB 是我编写的一个模块,它执行数据库连接

var Client = require('mysql').Client; 

exports.connectDatabase = function(host,user,password,database) {
    var client = new Client(); //Database connection object
    //Credentials for DB connection
    client.host = host; 
    client.user = user;
    client.password = password;
    client.database = database;

    client.connect(function(error, results) {
        if(error) {
          console.log('Connection Error:');
          return;
        }
    });
    return client;
}

我在这里对 node.js 做错了什么还是驱动程序/node.js 问题? 谢谢您的帮助!

我认为你应该更多地使用闭包。 对 fn2 的直接引用将使用名为 object,这将防止它脱离 scope。 通过闭包对相同代码的引用将导致匿名层,这将允许引用优雅地退出 scope 并进行垃圾收集。

我也遇到了这个问题,它与异步有关,需要使用闭包来解决。

node.js 异步问题?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM