Node.js API响应缓慢,MySQL连接数超限制问题排查求助
问题排查思路
1. 核对总连接上限匹配情况
- 先统计所有接入该MySQL实例的服务总连接配额:你的单Sequelize实例配置poolMax为20,若你的Node服务开启了多进程部署(如PM2多实例模式)、或有多个同配置服务共用该数据库,总允许连接数为「单实例poolMax * 进程数 * 服务数」,如果该值超过MySQL配置的640连接上限,就会出现连接溢出。
- 确认MySQL侧实际连接上限:执行命令
show variables like 'max_connections';核对生效值,避免你看到的640为未生效的旧配置。
2. 定位连接泄漏来源
- 执行MySQL命令
show processlist;查看活跃连接详情:重点关注连接对应的来源IP、Command状态、空闲时长,若存在大量空闲的Sleep状态连接,且空闲时长远超你配置的10s idle阈值,说明连接池回收机制失效。 - 排查业务代码异常:检查是否存在未正常关闭的长事务、手动创建的连接未释放、异常分支未处理导致连接被长期占用的情况,优先排查批量操作、事务相关的逻辑。
- 排查非Web服务的连接占用:确认是否有定时任务、离线脚本、第三方工具未使用连接池,每次请求新建连接后未主动关闭,占用了大量连接配额。
3. 验证Sequelize配置有效性
- 打印Sequelize初始化后的pool配置,确认
poolMax=20的参数实际生效,避免生产环境配置被覆盖。 - 检查Sequelize版本是否存在已知连接池bug:v6以下的部分Sequelize版本存在连接回收失效的已知问题,可尝试升级到稳定版或调整连接池参数测试:将
poolIdle调小到3000,观察空闲连接是否会正常回收。
内容的提问来源于stack exchange,提问作者D555
相关产品推荐
相关产品推荐

