在我的web應用程序中,我使用節點elasticsearch客戶端。 與其他客戶端我正在測試應用程序。 我發送了一個請求,郵遞員測試運行器的迭代次數爲1000,觀察內存增加。節點elasticsearch客戶端導致內存泄漏
在運行任何測試用例應用程序之前,需要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 0.39。
這是節點版本的問題嗎?或Elasticsearch客戶端版本?或與我的代碼?
有些可以幫助解決這個問題。
嗨snozza,感謝您的建議這樣的東西跟蹤泄漏。 – thrivikram
嗨snozza,謝謝你的建議。對於每個休息API調用,我觀察到內存在增加。與郵差休息客戶端我跑了3K次相同的查詢,內存不斷增加。我注意到在pm2和linux命令ps的幫助下內存增加。你覺得代碼中是否存在導致此問題的任何錯誤? elasticsearch節點客戶端是否緩存應用程序中的數據?如果是這種情況,我該如何清除應用程序中的緩存。 – thrivikram
如果不知道應用程序的具體細節,可能會導致內存泄漏(假設有),很難說清楚。我發現這個指南很方便http://www.nearform.com/nodecrunch/self-detect-memory-leak-node/它應該可以幫助你找出導致內存增加的原因。您可能會發現直接分析您的應用的更多成功。 – snozza