进程用完(充满了睡眠)

时间:2018-12-03 15:27:47

标签: javascript mysql node.js hang

我们有一台正在运行的服务器,它与数据库有2个连接,它们都是使用池创建的。

示例:

var connection = mysql.createPool({
  host: config.mysql.host,
  user: config.mysql.user,
  password: config.mysql.pass,
  database: config.mysql.database
});

但是,我们有很多查询,但是有一个池负责处理/关闭活动连接。

现在,连接只是堆积而已,旧连接并没有得到照顾。最终,我们将用尽所有可用的连接,服务器将挂起。

查询功能;

var query = function(query){
  return new Promise(function(resolve, reject){
    con.query(query, function(err, row){
      if(err){
        reject(err);
      }

      resolve(row);
    });
  });
}

功能的使用;

db.query('SELECT * FROM `users` WHERE `isBanned` = 0').then(function(users){
  //active users
}).catch(function(err){
  ...
});

所有正在堆积的连接都在命令睡眠

编辑:将连接合并到一个数据库池中

Main.js

var pool = mysql.createPool({
    connectionLimit: 250,
    host: config.mysql.host,
    user: config.mysql.user,
    password: config.mysql.pass,
    database: config.mysql.database,
    charset: 'utf8_general_ci'
});
module.exports.pool = pool;

Database.js (仅用于查询功能)

var main = require('./server.js');

var query = function(query){
  return new Promise(function(resolve, reject){
    main.pool.query(query, function(err, row){
      if(err){
        reject(err);
      }

      resolve(row);
    });
  });
}

module.exports = {
  con: main.pool,
  query: query
};

0 个答案:

没有答案