【问题标题】:Memory leak with nodejsnodejs的内存泄漏
【发布时间】:2015-06-21 17:35:56
【问题描述】:

我从谷歌加载我的日历。但每次我这样做时,节点都会使用 2 mb 以上的内存。即使我删除了模块。我需要每 5 或 10 分钟加载一次,以便查看是否有更改。这是我的代码。

google-calender.js 模块

module.exports = {

  loadCalendars: function(acces, res){
    gcal = require('google-calendar');
    google_calendar = new gcal.GoogleCalendar(acces);

    google_calendar.calendarList.list(function(err, calendarList) {

        toLoadCalenders = calendarList.items.length;
        loaded = 0;
        data = [];

        for(var i = 0; i < toLoadCalenders; i++){           
            google_calendar.events.list(calendarList.items[i].id, function(err, calendarList) {
                loaded++;
                data.push(calendarList);
                if (loaded == toLoadCalenders) {
                    res.send(data);
                }
            });

        }

    });
  }
}

ma​​in.js

app.get('/google-calender', function (req, res) {
    google = require('./google-calender');
    google.loadCalendars(acces, res);

    setTimeout(function(){
        delete google;
    },500);
});

有谁知道如何防止这里的内存泄漏?

【问题讨论】:

  • 仅供参考,您不要 delete Javascript 中的变量。您没有显示变量google 的声明位置,但通常您只是让它超出范围,如果没有其他人引用它,垃圾收集器将为您清理它。您可能想阅读以下内容:perfectionkills.com/understanding-delete
  • 要查看是否真的存在泄漏,您必须拍摄堆快照以查看实际使用的内存与等待重用的未使用内存。

标签: node.js memory-leaks google-authentication


【解决方案1】:

嗯,内存泄漏主题对于任何开发人员来说都是一个棘手的领域,首先你需要知道你是否有内存泄漏,我建议使用node inspector 并执行以下操作:

1- 打开节点检查器运行您的节点应用程序。

2- 在重新启动时拍摄堆快照,以便您了解应用使用的初始内存大小。

3- 做一些请求,你可以使用一些基准测试工具,同时拍摄第二个快照。

4- 比较快照 1 和快照 2,检测增加发生的位置,然后注意。

5- 停止发出请求并稍等片刻,以确保垃圾收集器已完成其工作,然后拍摄第三张快照。

6- 比较快照 3 和快照 2 的大小,你可能会发现快照 3 比快照 2 释放的大小更多。

您可能会多次执行此测试,如果最后一个快照的内存分配总是比其前一个快照增加,那么您可能存在内存泄漏。

如何修复内存泄漏?

好吧,您需要熟悉 javascript 中发生内存泄漏的案例,您可以阅读此 article 并在您的代码中匹配类似的案例。 然后您可以阅读您拥有的快照尝试的详细信息并匹配线性增加的部分,并找出您的代码中的哪些数据类型或数组、对象甚至模块代码被重复需要且从未被释放。

其实巧合的是,我们今天遇到了这样的情况,我们必须通过这个故障排除步骤来解决问题。

祝我的朋友好运。

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2018-11-12
    相关资源
    最近更新 更多