首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nodejs的内存泄漏

使用nodejs的内存泄漏
EN

Stack Overflow用户
提问于 2015-06-21 17:35:56
回答 1查看 811关注 0票数 0

我从谷歌下载我的日历。但是每次我这么做,节点就会多使用2MB内存。即使我删除了模块。我需要每5或10分钟加载一次,这样我就可以看到是否有变化。这是我的密码。

google-calender.js模块

代码语言:javascript
复制
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);
                }
            });

        }

    });
  }
}

main.js

代码语言:javascript
复制
app.get('/google-calender', function (req, res) {
    google = require('./google-calender');
    google.loadCalendars(acces, res);

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

有人知道我怎么能防止这里的内存泄漏吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-23 23:50:48

对于任何开发人员来说,内存泄漏问题都是一个棘手的问题,首先您需要知道是否存在内存泄漏,我建议您使用节点检验员并执行以下操作:

1-使用节点检查器运行节点应用程序。

2-在新开始时获取堆快照,这样您就可以知道应用程序使用的初始内存大小。

3-做一些要求,你可以使用一些基准工具,同时采取第二次快照。

4-比较快照1号和快照编号2,检测增长的发生地点,然后注意这一点。

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

6-比较快照3和快照2的大小,您可能会看到快照3释放的大小大于快照2。

您可能会多次进行此测试,如果最后一次快照的内存分配总是比前几次快照增加,则可能会出现内存泄漏。

如何修复内存泄漏?

那么,您需要熟悉javascript中发生内存泄漏的情况,您可以阅读这个文章并在代码中匹配类似的情况。然后,您可以阅读快照尝试的细节,并匹配线性增长部分,并找出代码中有这样的数据类型或数组、对象甚至模块代码的位置,这些数据类型或数组、对象甚至模块代码都是反复需要的,从未处理过。

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

祝你好运我的朋友。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30967391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档