Node.js来自简单程序的无法解释的内存增长(泄漏?)

时间:2014-09-17 09:06:36

标签: node.js memory-leaks v8

我认为我理解node / v8内存管理是如何工作的,但显然不是。

以下程序展示的rss在heapUsed增长时或多或少地增长,然后在垃圾收集器运行时收缩。

最近的一次测试让RSS开始大约10 MB,并在7分钟内增长到大约14MB。然后它一点一点地继续增长。

我已经尝试将report()中的所有变量设置为null,我尝试删除它们,但这些都没有任何效果。

我试过手动调用垃圾收集器。这会减缓增长但不会消除它。

有人可以解释为什么会这样吗?这是正常的行为,我只是等待gc在RSS上工作的时间不够长?这只是我编写的软件的一个简单例子,它表现出类似的行为。

var startTime = new Date();

var memInfo = {
    rss: 0,
    heapTotal: 0,
    heapUsed: 0
}

function report () {
    var endTime, timeDiff, seconds, minutes, hours, days, mem;

    endTime = new Date();
    timeDiff = (endTime - startTime) / 1000;
    seconds = Math.round(timeDiff % 60);
    timeDiff = Math.floor(timeDiff / 60);
    minutes = Math.round(timeDiff % 60);
    timeDiff = Math.floor(timeDiff / 60);
    hours = Math.round(timeDiff % 24);
    timeDiff = Math.floor(timeDiff / 24);
    days = timeDiff;

    console.log('Up for %d days %d hours %d minutes %d seconds', days, hours, minutes, seconds);

    var mem = process.memoryUsage();
    if (mem.rss > memInfo.rss) { memInfo.rss = mem.rss; }
    if (mem.heapTotal > memInfo.heapTotal) { memInfo.heapTotal = mem.heapTotal; }
    if (mem.heapUsed > memInfo.heapUsed) { memInfo.heapUsed = mem.heapUsed; }

    console.log('Latest', process.memoryUsage());
    console.log('Max   ', memInfo);
};

var timer = setInterval(report, 1000);

一个更简单的例子就是:

var memInfo = {
    rss: 0,
    heapTotal: 0,
    heapUsed: 0
}

var timer = setInterval(function () {
    var mem = process.memoryUsage();
    if (mem.rss > memInfo.rss) { memInfo.rss = mem.rss; }
    if (mem.heapTotal > memInfo.heapTotal) { memInfo.heapTotal = mem.heapTotal; }
    if (mem.heapUsed > memInfo.heapUsed) { memInfo.heapUsed = mem.heapUsed; }

    console.log('Latest', process.memoryUsage());
    console.log('Max   ', memInfo);

}, 1000);

0 个答案:

没有答案