2015-07-06 1 views
1

В моем веб-приложении я использую клиент узла elasticsearch. с клиентом отдыха Я тестирую приложение. Я отправил запрос с тестировщиком почтальона с номером итерации 1000, и наблюдаемая память увеличивается.Узел elasticsearch клиент, вызывающий утечку памяти

Перед запуском любого тестового примера приложение занимает 45 МБ ~. После запуска тестового примера с 1000 итерациями приложение потребляет ~ 90 МБ. После повторного запуска того же теста память памяти увеличивается до ~ 120 МБ. Я чувствую, что в приложении есть утечка памяти. версия

Node: 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? или с моим кодом?

Может ли кто-то помочь решить эту проблему.

ответ

0

глазного яблока, если есть даже признак утечки памяти, используйте process.memoryUsage() https://nodejs.org/api/process.html#process_process_memoryusage

Выходной сигнал будет иметь следующий формат:

{ rss: 4935680, 
    heapTotal: 1826816, 
    heapUsed: 650472 } 

Похоже, что нормальное поведение для rss (размер резидентного набора), чтобы расти последовательно, если вы буферизируете большое количество данных (вероятно, в случае с Elasticsearch). Поэтому показатели heapTotal и heapUsed скорее всего будут лучшими индикаторами.

Если ваше приложение не висит или ухудшается со временем, оно может не указывать на утечку памяти.

Взгляните на http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection для более глубокого изучения коллекции мусора v8.

Если вы до сих пор подозревают утечку памяти, или ваше приложение показывает явные признаки, перечисленные выше, вы можете захотеть взглянуть на отслеживание утечки с чем-то таким, как https://www.npmjs.com/package/memwatch

+0

Hi snozza, спасибо за предложение. – thrivikram

+0

Hi snozza, Спасибо за предложение. Для каждого вызова api для отдыха я наблюдал, что память увеличивается. с клиентом postman rest я побежал 3K раз такой же запрос, память продолжает расти. Я заметил увеличение памяти с помощью pm2 и linux команды ps. Считаете ли вы, есть ли ошибка в коде, вызывающая эту проблему? Использует ли elachesearch данные кэша клиента в приложении? Если это так, я могу очистить этот кеш в приложении. – thrivikram

+0

Трудно сказать, не зная специфику приложения, что может вызвать утечку памяти (при условии, что она есть). Я нашел это руководство очень удобным http://www.nearform.com/nodecrunch/self-detect-memory-leak-node/ Он должен помочь вам отследить, что вызывает увеличение памяти. Вы, вероятно, найдете больше успеха, анализируя ваше приложение напрямую. – snozza