Утечка памяти в журнале NodeJS + GCloud

Я обнаружил утечку памяти в нашем производственном коде для 2 слабых мест. В конце я воспроизвел утечку памяти с помощью простого сервера nodejs и gcloud logging api.

Сервер Nodejs такой же, как в руководстве по началу работы с Nodejs.

'use strict';

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

module.exports = server;

Я пишу заголовки каждого запроса в журнал gcloud:

'use strict';

const app = require('./app.js');

const gcloud  = require('gcloud')({
    keyFilename: 'my-key-file',
    projectId: 'my-project-id'
});

const logging = gcloud.logging();

const logs = logging.log('log-bucket');

const resource = {
  type: 'logging_log',
  labels: {
    name: 'clear_node_logs',
  }
};

app.on('request', function onServerRequest(req, res) {
    const entry = logs.entry(resource, req.headers);

    logs.info(entry, logHandler);
});

function logHandler(err) {
    if (err) {
        console.log(err);
    }
}

Если я сделаю 300 тыс. запросов на этот сервер, я получу следующее использование памяти

введите здесь описание изображения

Как видите, утечки памяти. В конце я получаю исключение OutOfMemory.

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

Что может быть источником этой утечки в таком простом приложении?


person mmurygin    schedule 07.09.2016    source источник
comment
какую версию gcloud-node вы используете?   -  person Evgeny Timoshenko    schedule 07.09.2016
comment
В производстве мы используем gcloud-node 0.37.0 и nodejs 4.2.2. Но у меня такая же проблема с gcloud-node 0.39.0 и nodejs 4.5.0.   -  person mmurygin    schedule 07.09.2016


Ответы (1)


В нашей зависимости gRPC произошла утечка памяти, о которой первоначально сообщалось здесь: https://github.com/GoogleCloudPlatform/google-cloud-node/issues/1414

Недавно в gRPC было выпущено исправление, и сегодня мы выпустим версии google-cloud и затронутых подмодулей.

person Stephen    schedule 07.09.2016
comment
Спасибо, это здорово! - person mmurygin; 07.09.2016
comment
comment
Проблема до сих пор не исправлена!! @google-cloud/logging 0.8.1, узел v.6.3.1, Mac OS 10.11.6 - person aleks.n.fedorov; 31.03.2017
comment
@m-murygin, вы когда-нибудь видели, чтобы эта утечка исчезла после того, как мы выпустили то, что, как мы думали, было исправлением? (сопутствующая проблема: github.com/GoogleCloudPlatform/google-cloud-node/issues/ 2166) - person Stephen; 31.03.2017