프로덕션 코드에서 2 개의 약점에 대한 메모리 누수가 발생했습니다. 마지막에는 간단한 nodejs 서버와 gcloud 로깅 API를 사용하여 메모리 누출을 재현했습니다.NodeJS + GCloud 로깅에서의 메모리 누수
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하는 모든 요청 헤더를 쓰기 로깅 : 내가 얻을이 서버에 300K 요청을 할 경우
'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);
}
}
다음 메모리 사용량
메모리 누수가 보입니다. 결국 OutOfMemory 예외가 발생합니다.
setInterval
내부에 같은 양의 데이터를 기록하면 메모리가 누출되지 않습니다.
간단한 응용 프로그램에서 그 누수의 원인이 될 수있는 것은 무엇입니까?
어떤 gcloud-node 버전을 사용하고 있습니까? –
우리는 gcloud-node 0.37.0과 nodejs 4.2.2를 사용합니다. 그러나 gcloud-node 0.39.0 및 nodejs 4.50과 동일한 문제가 발생했습니다. – muryginm