在我的Web应用程序中,我正在使用节点elasticsearch客户端。 与rest客户端我正在测试应用程序。 我发送了邮递员测试运行器的请求,迭代次数为1000,观察到的内存增加了。
在运行任何测试用例之前,应用程序需要45MB~。 在运行1000次迭代的测试用例之后,应用程序正在消耗~90MB。 重新运行相同的测试用例后,内存增长到~120MB。 我觉得应用程序中存在内存泄漏。
节点版本:0.12.5 Elasticsearch DB版本:1.5.2 Elasticsearch节点客户端:4.0.2
示例代码:
var client = new elasticsearch.Client({
hosts: elasticHosts
});
app.all('*', function(req, res, next) {
validateApiKey(req.headers["apikey"],next,res);
})
function validateApiKey(ApiKey,next,response) {
var hits;
var isValidApiKey = false
client.search({
index: 'clients',
type: 'search',
body: {
"query":{
"match":{
"apikey" : ApiKey
}
}
}
},function(err,res) {
response.send(true);
}
如果使用节点版本0.10.39,我注意到发生了内存泄漏。
节点版本有问题吗?或Elasticsearch客户端版本?还是用我的代码?
有些人可以帮助解决这个问题。
答案 0 :(得分:0)
如果甚至有内存泄漏迹象,请注意,请使用process.memoryUsage() https://nodejs.org/api/process.html#process_process_memoryusage
输出将采用以下格式:
{ rss: 4935680,
heapTotal: 1826816,
heapUsed: 650472 }
如果要缓存大量数据(可能是Elasticsearch的情况),rss(驻留集大小)的正常行为似乎是一致的。因此,heapTotal和heapUsed指标更有可能成为更好的指标。
如果您的应用程序没有挂起或性能随着时间的推移而降低,则可能并不表示内存泄漏。
再看看http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection,深入了解一下v8垃圾收集。
如果您仍然怀疑内存泄漏,或者您的应用显示上面列出的告示标志,您可能需要查看使用https://www.npmjs.com/package/memwatch
之类的内容来跟踪泄漏