进程耗尽(充斥着睡眠)

oknrviil  于 2021-06-18  发布在  Mysql
关注(0)|答案(0)|浏览(416)

我们有一个运行的服务器,它有两个到数据库的连接,它们都是使用池创建的。
例子:

  1. var connection = mysql.createPool({
  2. host: config.mysql.host,
  3. user: config.mysql.user,
  4. password: config.mysql.pass,
  5. database: config.mysql.database
  6. });

但是,我们有很多查询,但是池负责处理/关闭我被告知的活动连接。
现在的连接只是堆积如山,旧的连接没有得到照顾。最终我们将用尽可用的连接,服务器将挂起。
查询功能;

  1. var query = function(query){
  2. return new Promise(function(resolve, reject){
  3. con.query(query, function(err, row){
  4. if(err){
  5. reject(err);
  6. }
  7. resolve(row);
  8. });
  9. });
  10. }

函数的使用;

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

所有正在堆积的连接都处于命令休眠状态
编辑:将连接合并到一个数据库池中
主要.js

  1. var pool = mysql.createPool({
  2. connectionLimit: 250,
  3. host: config.mysql.host,
  4. user: config.mysql.user,
  5. password: config.mysql.pass,
  6. database: config.mysql.database,
  7. charset: 'utf8_general_ci'
  8. });
  9. module.exports.pool = pool;

database.js(基本上只是用于查询函数)

  1. var main = require('./server.js');
  2. var query = function(query){
  3. return new Promise(function(resolve, reject){
  4. main.pool.query(query, function(err, row){
  5. if(err){
  6. reject(err);
  7. }
  8. resolve(row);
  9. });
  10. });
  11. }
  12. module.exports = {
  13. con: main.pool,
  14. query: query
  15. };

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题