grpc-node: Duplex stream leads to memory leak
Hi,
we experiencing a memory leak when using a duplex stream with grpc and node. The following simplified example growths:
const protoLoader = require("@grpc/proto-loader");
const grpc = require("@grpc/grpc-js");
const protoFile = "test.proto";
const packageDefinition = protoLoader.loadSync(protoFile, {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const definition = grpc.loadPackageDefinition(packageDefinition).test;
function getServer() {
const server = new grpc.Server();
server.addService(definition.TestService.service, {
startDataStream: call => {
call.on('data', () => {
const array = new Array(33000).fill(-6000);
call.write({values: array});
})
}
});
return server;
}
const routeServer = getServer();
routeServer.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
routeServer.start();
const client = new definition.TestService('localhost:50051', grpc.credentials.createInsecure());
const call = client.startDataStream();
call.on('data', () => {
call.write({});
});
call.write({});
});
And the corresponding proto file:
syntax = "proto3";
import "google/protobuf/empty.proto";
package test;
message Test {
repeated double values = 1;
}
service TestService {
rpc startDataStream(stream google.protobuf.Empty) returns(stream Test){}
}
I took the snapshots with Jetbrains Webstorm v8. That’s my package.json:
{
"name": "tests",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"@grpc/grpc-js": "0.5.0",
"@grpc/proto-loader": "0.5.1"
}
}
I use node 10.13.0 and yarn 1.19.1
BR
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 27 (12 by maintainers)
I have published version 1.8.13 with a fix for a leak in channelz.