NodeJS + GCloud日志logging中的内存泄漏

我一直在为我们的生产代码寻找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日志logging:

 '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); } } 

如果我向这个服务器发出300k的请求,我会得到下面的内存使用情况

在这里输入图像描述

正如你所看到的内存泄漏。 最后,我得到OutOfMemoryexception。

如果我在setInterval函数内logging相同数量的数据,内存不会泄漏。

在这样一个简单的应用程序中,泄漏的来源是什么?

我们的依赖gRPC有一个内存泄漏,最初在这里报告: https : //github.com/GoogleCloudPlatform/google-cloud-node/issues/1414

gRPC最近发布了一个修复程序,我们今天将发布google-cloud版本和受影响的子模块。