Node.js,SQLite3和Express - POST上潜在的内存泄漏

时间:2014-08-22 16:33:06

标签: javascript node.js sqlite v8 node-memwatch

我对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个帖子,这样的堆增长将是预期的,但我还没有找到一个明确的答案,需要排除它。任何帮助,即使你只是指出我正确的方向,将不胜感激!

0 个答案:

没有答案