我正在使用nodetime来分析我的节点应用。 显然,存在内存泄漏;这是我2天内的堆(2次下降是由于重新启动应用程序):
所以我正在拍摄快照,但很难弄清楚泄漏的原因是什么。对象似乎来去(例如,它并不总是堆中的相同对象)。这是一个例子:
我不太确定从哪里开始。 在这种特殊情况下,我认识到“最大实例”中表示的字符串。 第2和第3个字符串都来自我使用Facebook Graph加载Node-OAuth的/ 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”属性,这一点很奇怪。
任何人都可以就如何找出泄漏的最终原因向我提供一些可靠的方向吗?