我不希望数据库请求在连接之前意外运行,因此 connect 方法返回一个 Promise,并且每个数据库方法都使用 connectPromise.then()
。
我的应用程序似乎正在泄漏内存,所以我想知道这是否是原因。 v8 堆内存快照中的头号罪犯名为 sql
,包含来自 bluebird Promise 和域的大量内容。我真的不知道该怎么理解它,但我想到了一个连接 promise 。
编辑:我已经确认问题的根源确实是我遵守 Sequelize promise 的做法。为了进行测试,我尝试每 30 秒刷新一次 promise ,然后我的应用程序停止收集越来越多的内存。
最佳答案
假设您正在编写服务器,为什么不在监听端口之前建立数据库连接?
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/