MongoNetworkError连接超时问题求助(ETIMEDOUT 3.108.0.179:27017)
MongoDB连接超时及连接池重置问题排查与解决
问题描述
此前运行正常的多MongoDB数据库连接函数,3-4周前突然出现连接超时及连接池重置错误。已将自身IP加入白名单,甚至暂时允许所有IP访问,但启动Node服务器时仍会触发该错误,在MongoSupport提问未获回复,寻求技术支持。
完整错误信息
MongoNetworkError: connect ETIMEDOUT 3.108.0.179:27017 at connectionFailureError (G:\ALIAN PROJECT\alian-hub-api\node_modules\mongodb\lib\cmap\connect.js:367:20) at TLSSocket.<anonymous> (G:\ALIAN PROJECT\alian-hub-api\node_modules\mongodb\lib\cmap\connect.js:290:22) at Object.onceWrapper (node:events:629:26) at TLSSocket.emit (node:events:514:28) at TLSSocket.emit (node:domain:489:12) at emitErrorNT (node:internal/streams/destroy:151:8) at emitErrorCloseNT (node:internal/streams/destroy:116:3) at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { cause: Error: connect ETIMEDOUT 3.108.0.179:27017 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) { errno: -4039, code: 'ETIMEDOUT', syscall: 'connect', address: '3.108.0.179', port: 27017 }, connectionGeneration: 0, [Symbol(errorLabels)]: Set(1) { 'ResetPool' } }
连接配置代码
const connection = await mongoose.createConnection(`${process.env.MONGODB_URL}/${db}`, { maxPoolSize: 60, useNewUrlParser: true, connectTimeoutMS: 50000 }) connection.on('connected', () => { logger.info(`MONGO CONNECTION ${db}: connected`); console.log(`MONGO CONNECTION ${db}: connected`); resolve(connection); }); //...Other handers for connection connection.on('error', (error) => { logger.error(`MONGO CONNECTION: error >> ${JSON.stringify(error)}`) });
排查与解决建议
- 网络连通性验证:在服务器上执行
telnet 3.108.0.179 27017或nc -zv 3.108.0.179 27017,确认端口是否能正常连通。若不通,排查云服务商防火墙规则、服务器出站端口限制或本地网络运营商策略。 - 依赖版本兼容性检查:查看
package.json中mongoose和mongodb驱动版本,若近期有更新,回退到之前稳定版本测试。执行npm list mongoose mongodb对比版本记录,确认是否因版本升级引发兼容性问题。 - 连接池配置优化:当前
maxPoolSize:60,多数据库连接时总连接数可能超过MongoDB实例上限。尝试将maxPoolSize降至20-30,同时添加socketTimeoutMS: 60000配置,避免网络波动导致的超时。 - 完善连接重试机制:在连接配置中加入
autoReconnect: true、serverSelectionTimeoutMS: 30000等参数,确保连接失败后自动重试。示例调整后的配置:const connection = await mongoose.createConnection(`${process.env.MONGODB_URL}/${db}`, { maxPoolSize: 30, useNewUrlParser: true, connectTimeoutMS: 50000, socketTimeoutMS: 60000, serverSelectionTimeoutMS: 30000, autoReconnect: true }) - MongoDB实例状态排查:登录管理后台查看实例CPU/内存占用、连接数是否超限,检查实例日志是否有连接拒绝记录,确认是否因资源不足导致连接失败。
- DNS解析验证:若
MONGODB_URL使用域名,执行nslookup或dig命令确认解析结果是否正确,尝试直接用IP地址替换域名测试,排除DNS缓存或解析错误。
内容的提问来源于stack exchange,提问作者Shiv Joshi
相关产品推荐
相关产品推荐

