我对node.js比较陌生,而且我的任务是编写一个简单的消息队列应用程序 - 基本上,应用程序将收到一个包含一些消息数据的帖子和客户端的mac地址,我们将其解码然后插入一个sqlite数据库,稍后由一个单独的进程发布。
一切正常,但我们遇到的可能是内存泄漏。使用memwatch模块,我将泄漏范围缩小到我们处理传入帖子的代码,我在下面提到了这些:
app.route('*')
.post(function(req, res){
var mac = decodeURI(unescape(req.param('mac').replace(/\+/g, "%20")));
var data = decodeURI(unescape(req.param('data').replace(/\+/g, "%20")));
req = null;
db.run("INSERT INTO queue (mac, data) VALUES (?,?)", [mac, data], function(er){
if(er) {
res.writeHead(500, "Insert to queue failed", {'Content-Type': 'text/html'});
res.end();
} else {
res.writeHead(200, "OK", {'Content-Type': 'text/html'});
res.end();
}
res = null;
mac = null;
data = null;
});
})
我无法在这里找到任何看起来不正确的内容,但是当我们向应用发布10000个请求时,我们几乎总是在memwatch中触发内存泄漏事件。我正在寻找一个正确方向的推动:我们只是误解了记忆,或者是否有泄漏在这里我以某种方式失踪?据我所知,memwatch认为堆增长超过5次或更多V8垃圾收集尝试连续泄漏 - 似乎有可能一次10000个帖子,这样的堆增长将是预期的,但我还没有找到一个明确的答案,需要排除它。任何帮助,即使你只是指出我正确的方向,将不胜感激!