external和heapUsed减少但heapTotal增加

时间:2018-04-05 09:58:32

标签: node.js

非常令人惊讶的是,计数器 heapUsed 外部显示减少但仍然显示heapTotal显示峰值。

***Memory Log  - Before soak summarization 2
"rss":217214976,"heapTotal":189153280,"heapUsed":163918648,"external":1092977
Spike in rss: 4096
Spike in heapTotal: 0
Spike in heapUsed: 22240
Spike in external: 0

***Memory Log  - Before summarizing log summary for type SOAK
"rss":220295168,"heapTotal":192294912,"heapUsed":157634440,"external":318075
Spike in rss: 3080192
Spike in heapTotal: 3141632
Spike in heapUsed: -6284208
Spike in external: -774902

尽管heapUsed和外部大幅下降,但为什么heapTotal大幅增加的任何想法。我的意思是我真的以为heapTotal = heapUsed + external

我使用以下代码来跟踪内存

var prevStats;
function logMemory (path,comment) {
    if (! fs.existsSync(path)) {
        fs.mkdirSync(path, DIR_MODE);
    }
    path = pathUtils.posix.join(path,"memoryLeak.txt");
    if (comment) comment = comment.replace(/(.+)/,' - $1');
    var memStats = process.memoryUsage();
    fs.appendFileSync(path,`\r\n\r\n***Memory Log ${comment}\r\n`+JSON.stringify(process.memoryUsage()));
    if (prevStats) {
        _.forEach (
            Object.keys(memStats),
            key => {
                if (memStats.hasOwnProperty(key)) {
                    fs.appendFileSync(path,`\r\nSpike in ${key}: ${memStats[key]-prevStats[key]}`);
                }
            }
        );
    }
    prevStats = memStats;
}

0 个答案:

没有答案