Skip to content

Occasional LEAK on ByteBuf detected by netty #1169

Open
@uweschaefer

Description

@uweschaefer

The context

Running in production, we occasionally (once every 4-8 weeks) we see this error being logged
LEAK: ByteBuf.release() was not called before it's garbage-collected.

The bug

There is no observable misbehavior, as this is just a warning issued when GCing.

Stacktrace and logs

error - io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector: LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information. 


Recent access records: Created at: 
io.grpc.netty.shaded.io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:402) 
io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188) 
io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:124) 
io.grpc.netty.shaded.io.grpc.netty.NettyWritableBufferAllocator.allocate(NettyWritableBufferAllocator.java:51) 
io.grpc.internal.MessageFramer.writeBufferChain(MessageFramer.java:246) 
io.grpc.internal.MessageFramer.writeCompressed(MessageFramer.java:198) 
io.grpc.internal.MessageFramer.writePayload(MessageFramer.java:141) 
io.grpc.internal.AbstractStream.writeMessage(AbstractStream.java:66) 
io.grpc.internal.ServerCallImpl.sendMessageInternal(ServerCallImpl.java:168) 
io.grpc.internal.ServerCallImpl.sendMessage(ServerCallImpl.java:152) 
io.grpc.ForwardingServerCall.sendMessage(ForwardingServerCall.java:32) 
io.opentelemetry.javaagent.shaded.instrumentation.grpc.v1_6.TracingServerInterceptor.sendMessage(TracingServerInterceptor.java:107) 
io.grpc.ForwardingServerCall.sendMessage(ForwardingServerCall.java:32) 
io.micrometer.core.instrument.binder.grpc.MetricCollectingServerCall.sendMessage(MetricCollectingServerCall.java:63) 
io.grpc.ForwardingServerCall.sendMessage(ForwardingServerCall.java:32) 
io.micrometer.core.instrument.binder.grpc.ObservationGrpcServerCall.sendMessage(ObservationGrpcServerCall.java:56) 
io.grpc.stub.ServerCalls.onNext(ServerCalls.java:380) 

Steps to Reproduce

no idea.

The application's environment

Which versions do you use?

  • Spring (boot): 3.4.x
  • grpc-java: 1.63.0
  • grpc-spring-boot-starter: 3.1.0.RELEASE
  • java: corretto 21 (several versions) on x86-64

Additional context

We're using a trivial LZ4 codec, just wrapping the streams into respective LZ4 Streams. Probably not interesting.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething does not work as expected

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions