You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS Express后端连接MariaDB频繁出现too many connections问题求助

NodeJS Express后端连接MariaDB频繁出现too many connections问题求助

看起来你遇到的是连接池管理不当导致的连接耗尽问题,咱们一步步来排查和解决:

先分析你的代码核心问题

你当前的dbQuery函数里,用conn.end()来处理连接结束,这其实是直接关闭该连接并从连接池移除,而非把连接放回池里复用。这样连接池的复用机制完全没发挥作用,每次查询都会创建新连接,时间一长就会积累大量未被正确回收的连接,最终触发MariaDB的too many connections错误。

另外你的连接池配置只填了基础的连接信息,缺少关键的连接池管理参数,这也会导致闲置连接长期占用资源,慢慢耗尽连接配额。

具体修复方案

1. 修正连接释放方式

把conn.end()改成conn.release(),这样连接会被放回连接池,供后续查询复用,避免频繁创建新连接:

const dbQuery = async(query) => {
  let conn;
  let res = '';
  try {
    conn = await pool.getConnection();
    res = await conn.query(query);
  } catch (err) {
    console.log("Error sending Query: ", query, err.text);
    // 建议抛出错误让调用方处理,而非返回空字符串,避免后续逻辑异常
    throw err;
  } finally {
    if (conn) {
      // 用release放回连接池,而非end直接关闭
      conn.release();
    }
    return res;
  }
}

2. 完善连接池配置

添加连接池管理参数,限制最大连接数、闲置超时等,避免连接无限积累:

const pool = mariadb.createPool({
  host: process.env.DBHost,
  user: process.env.DBUser,
  database: process.env.DB,
  password: process.env.DBSecret,
  // 最大连接数,根据服务器和MariaDB配置调整,建议10-20
  maxPoolSize: 15,
  // 闲置连接超时时间,超过后自动关闭闲置连接(单位:毫秒)
  idleTimeout: 60000,
  // 获取连接的超时时间,避免无限等待(单位:毫秒)
  connectionTimeout: 10000,
  // 连接最大生命周期,到期自动关闭(单位:毫秒)
  maxLifetime: 1200000
});

3. 优化错误处理逻辑

当前catch块只打印错误但返回空字符串,容易导致后续业务逻辑出现隐性问题,建议抛出错误让调用方捕获处理:

catch (err) {
  console.error("Error executing query: ", query, err);
  throw err; // 抛出错误,让上层调用方处理异常场景
}

4. 检查MariaDB的连接数配置

登录MariaDB执行以下命令,查看当前最大连接数限制:

SHOW VARIABLES LIKE 'max_connections';

如果默认值(比如151)太小,可以修改my.cnf或my.ini文件调整:

[mysqld]
max_connections = 200

修改后重启MariaDB生效,注意连接池的maxPoolSize不要超过这个值,最好预留10-20个连接给系统管理员使用。

额外排查点

  • 检查代码中是否有其他地方直接创建MariaDB连接却未释放
  • 查看服务器上是否有定时任务或其他服务在占用MariaDB连接
  • 可以用MariaDB的SHOW PROCESSLIST;命令查看当前连接状态,确认是否有大量闲置或异常连接

备注:内容来源于stack exchange,提问作者Emilio José Pérez Mariscal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:07:38