Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js内存泄漏:无法理解堆快照_Node.js - Fatal编程技术网

Node.js内存泄漏:无法理解堆快照

Node.js内存泄漏:无法理解堆快照,node.js,Node.js,我正在使用nodetime分析我的节点应用程序。 显然,内存泄漏;这是我在2天内的积累。由于重新启动应用程序,这2次流失是由于: 所以我正在拍摄堆快照,但很难找出泄漏的原因。对象似乎来来往往,例如,堆中的对象并不总是相同的。下面是一个例子: 我不太清楚接下来该怎么办。 在这个特殊的例子中,我识别最大实例中表示的字符串。 第二个和第三个字符串都来自我加载using的/me/home端点 说实话,我并不清楚body属性是否真的在泄漏,或者它是否恰好在我拍摄快照时在堆中,如果我拍摄另一张快照,它并不总

我正在使用nodetime分析我的节点应用程序。 显然,内存泄漏;这是我在2天内的积累。由于重新启动应用程序,这2次流失是由于:

所以我正在拍摄堆快照,但很难找出泄漏的原因。对象似乎来来往往,例如,堆中的对象并不总是相同的。下面是一个例子:

我不太清楚接下来该怎么办。 在这个特殊的例子中,我识别最大实例中表示的字符串。 第二个和第三个字符串都来自我加载using的/me/home端点

说实话,我并不清楚body属性是否真的在泄漏,或者它是否恰好在我拍摄快照时在堆中,如果我拍摄另一张快照,它并不总是存在

无论如何,下面是我的OAuthNetwork类的一个摘录:

OAuthNetwork.prototype.oauth = function() {
    return new OAuth(
            this.settings['url_request_token'],
            this.settings['url_access_token'],
            this.data['key'],
            this.data['secret'],
            this.settings['version'],
            this.settings['url_callback'],
            this.settings['encoding'],
            null,//nonceSize
            this.settings['request_headers']
        );
};
OAuthNetwork.prototype.requestWithCredentials = function(credentials, endpoint, method, params, callback)
{
    var url = this.getRequestURL(endpoint, method, params),
        m = (method || 'GET').toUpperCase(),
        body = (m==='PUT'||m==='POST') ? this.buildRequestBody(params) : '',
        ct = this.settings.request_headers['Content-Type'] || null,
        extra = null;

    this.oauth()._performSecureRequest(credentials.key, credentials.secret, method, url, extra, body, ct, function(error, data, response) {

        if(error)
        {
            callback(new Errors.External({'message':'there was an error with the remote service: '+JSON.stringify(error),'error':error,'endpoint': endpoint}));
            return;
        }
        callback(null, {'body': data, 'response': response});
    });
};
所以,我留下的印象是身体的能量场被保留/泄露了。但是,我发现堆快照特别引用了body属性,而不是response属性,这很奇怪


有谁能为我提供一些关于如何着手找出泄漏的最终原因的可靠指导吗?

查看堆快照中不同类别的保留器的百分比,它似乎没有显示真正的泄漏。泄漏可能会以较低的百分比分布在不同的类别中,或者由于某种原因而未计算在内。比较应用程序启动时的快照和堆峰值大小,您发现有什么区别吗?查找泄漏代码/模块的另一种方法是尝试将堆增长与应用程序动态(例如请求数、调用数等)关联起来,并查看是否有匹配的内容。