NodeJS Express变得无响应,并获取超时

我有一种感觉,我有某种地方的泄漏,但我不知道如何识别或排除故障。 我使用express和nodejs的请求模块。 在负载下,通过请求向Facebook Graph API发起的https呼叫开始经历长时间延迟或超时。 起初,我认为这是一个在接收端(Facebook)的节stream问题,但是如果我做一个简单的C#控制台应用程序调用相同的URL几百次,没有一个响应时间大于150毫秒。 但是,节点中的相同代码从50ms到10s不等。 如果我使用请求时设置了超时属性,我开始得到ESOCKETTIMEDOUT错误。 如果我将请求选项上的pool.maxsize设置为100,那么我会得到ETIMEDOUT错误。

我怎样才能弄清楚我的挂断发生在哪里?

这是我使用请求模块的一个示例。 我也尝试添加到我的应用程序:

require('http').globalAgent.maxSockets = Infinity; require('https').globalAgent.maxSockets = Infinity; var executeGetUrl = function getUrl(url, cacheKey, parseJson, accessToken, callback) { if (accessToken) { url = url + '?access_token=' + accessToken; } try { request({url: url, timeout: 10000, 'pool.maxSockets' : 100}, function (err, res, body) { if (err) { logger.error('Made facebook api call to ' + url + ' with error ' + err); callback(err, null); return; } if (parseJson) { try { body = JSON.parse(body); } catch (err) { callback(new Error('Could not parse ' + res.body + ': ' + err), null); return; } if (body.error) { err = new Error('Error calling ' + url + '. ' + body.error.message); err.code = body.error.code; callback(err, null); } else { callback(null, body || {}); } } else { if (res.statusCode != 200) { callback(new Error(res.body)); } else { callback(null, res.body || {}); } } }); } catch (err) { callback(null, err); } }; 

我正在记忆60秒的结果,但这似乎没有任何关系的问题

 var getUrl = memoize(executeGetUrl, {async: true, maxAge: 60000, length: 2}); 

并在承诺链中使用该function

  var deferred = q.defer(); getUrl(photosUrl, null, false, null, function (err, body) { if (err) { deferred.reject(err); return; } deferred.resolve(body); }); return deferred.promise;