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)

Most upvoted comments

I have published version 1.8.13 with a fix for a leak in channelz.