node.js - Node (内存泄漏,v8 快照)- 使用连接 promise 是不好的做法吗?

标签 node.js memory-leaks garbage-collection sequelize.js bluebird

我不希望数据库请求在连接之前意外运行,因此 connect 方法返回一个 Promise,并且每个数据库方法都使用 connectPromise.then()

我的应用程序似乎正在泄漏内存,所以我想知道这是否是原因。 v8 堆内存快照中的头号罪犯名为 sql,包含来自 bluebird Promise 和域的大量内容。我真的不知道该怎么理解它,但我想到了一个连接 promise 。

enter image description here

编辑:我已经确认问题的根源确实是我遵守 Sequelize promise 的做法。为了进行测试,我尝试每 30 秒刷新一次 promise ,然后我的应用程序停止收集越来越多的内存。

我打开了issue in sequelize

最佳答案

假设您正在编写服务器,为什么不在监听端口之前建立数据库连接?

db.connect().then(function(){
     server.listen(function(){

     });
});

我并不是说 Sequelize 的问题不存在,但我认为最好不要每次发出数据库请求时都调用 connect().then()

这种类型的模式有一些地方,但我认为这不是其中之一。

Bluebird 似乎无法与 domains 很好地配合,这就是内存泄漏发生的地方。据我所知,Bluebird 是唯一一个尝试在 Node.js 中正确传播域的 Promise 库。

关于node.js - Node (内存泄漏,v8 快照)- 使用连接 promise 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683871/

相关文章:

node.js - 基于相关表的 Mongoose 过滤器

javascript - gulp-istanbul、isparta 和 ES6 测试覆盖率

pointers - 为什么 Rust 认为泄漏内存是安全的?

iphone - UIWebView内存管理

memory-leaks - 在 Lua 中丢失引用

node.js - 无法安装NPM包

Node.js、AWS Cognito - 前端登录,后端用户验证

javascript - eval() JavaScript 内存泄漏

java - ORB.destroy() 无法正确清理,ORB 对象实例不会被垃圾回收

java - Java删除线程的方法