原生JS Promise的这种用法是否会导致Node.js中的内存泄漏?

这里是我有的代码的示例代表。 我有一个UDP接收器,它会连续收到大量的数据包。 这是股市现场数据。 这应该给一些关于数据包量的想法。

根据收到的数据,更新到一个MySQL数据库和另一个到MongoDB。 然而,这个代码泄漏内存就像任何东西,并在大约12分钟内与7.5GB内存的EC2机器上的OOM错误崩溃。 这个崩溃是非常一致的。

我读了几个关于与Promise链接或recursion调用Promise相关的内存泄漏的stackoverflow问题和github问题。 我觉得我的代码不适合这个描述,因此想知道这个代码是否也会导致内存泄漏。

当我将这整个代码改变为没有Promises和callback的时候,内存消耗接近1%。 没有泄漏。

我正在使用当前稳定版本的Node.js(v6.9.5 LTS)。 使用原生Promise,没有像Bluebird这样的库

const dgram = require('dgram'); const receiver = dgram.createSocket('udp4'); const myObject = require('./myObject.js'); receiver.on('message', function(payload, sender) { myObject.processPayload(payload); }); receiver.bind(PORT); // In mObject.js var myObject = { processPayload: function(payload) { var updateDoc = doSomethingToPayload(payload); // Mongo npm package offers APIs which return a Promise var promise1 = this.mongoClient.collection('coll1').update(updateDoc); var promise2 = this.getMysqlPromise(updateDoc); Promise.all([promise1, promise2]).then(function(values) { doSomethingElse(); }).catch(function(err) { doErrorHandling(); }); }, // The mysql npm package does not offer APIs which return a Promise. Hence creating a Promise myself. // The mysql2 package does. Tried that too and the same memory leak exists. getMysqlPromise: function(updateDoc) { var queryStatement = buildQueryFromUpdateDoc(updateDoc); var self = this; var promise = new Promise(function(resolve, reject) { self.MysqlDB.query(queryStatement, function(err, results, fields) { if (err) { reject(err); return; } resolve(results); }); }); return promise; } }