question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

LEAK: ByteBuf.release() was not called before it's garbage-collected. (ReactiveMongoRepository)

See original GitHub issue

I’m using ReactiveMongoRepository with Kotlin and I’m getting this memory leak error from time to time

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.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:385) 
io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187) 
io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:178) 
io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:115) 
org.springframework.core.io.buffer.NettyDataBufferFactory.allocateBuffer(NettyDataBufferFactory.java:71) 
org.springframework.core.io.buffer.NettyDataBufferFactory.allocateBuffer(NettyDataBufferFactory.java:39) 
org.springframework.http.codec.json.AbstractJackson2Encoder.encodeValue(AbstractJackson2Encoder.java:236) 
org.springframework.http.codec.ServerSentEventHttpMessageWriter.encodeEvent(ServerSentEventHttpMessageWriter.java:174) 
org.springframework.http.codec.ServerSentEventHttpMessageWriter.lambda$encode$0(ServerSentEventHttpMessageWriter.java:160) 
reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106) 
reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120) 
reactor.core.publisher.FluxUsingWhen$UsingWhenSubscriber.onNext(FluxUsingWhen.java:358) 
reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) 
reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:250) 
reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:281) 
reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:860) 
reactor.core.publisher.FluxConcatMap$WeakScalarSubscription.request(FluxConcatMap.java:476) 
reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2193) 
reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442) 
reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:250) 
com.mongodb.reactivestreams.client.internal.AbstractSubscription.onNext(AbstractSubscription.java:155) 
com.mongodb.reactivestreams.client.internal.AbstractSubscription.processResultsQueue(AbstractSubscription.java:230) 
com.mongodb.reactivestreams.client.internal.AbstractSubscription.tryProcessResultsQueue(AbstractSubscription.java:185) 
com.mongodb.reactivestreams.client.internal.MongoIterableSubscription.lambda$requestMoreData$1(MongoIterableSubscription.java:99) 
com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) 
com.mongodb.internal.operation.AsyncQueryBatchCursor.handleGetMoreQueryResult(AsyncQueryBatchCursor.java:351) 
com.mongodb.internal.operation.AsyncQueryBatchCursor.access$600(AsyncQueryBatchCursor.java:56) 
com.mongodb.internal.operation.AsyncQueryBatchCursor$CommandResultSingleResultCallback.onResult(AsyncQueryBatchCursor.java:383) 
com.mongodb.internal.operation.AsyncQueryBatchCursor$CommandResultSingleResultCallback.onResult(AsyncQueryBatchCursor.java:356) 
com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) 
com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor$2.onResult(DefaultServer.java:288) 
com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) 
com.mongodb.internal.connection.CommandProtocolImpl$1.onResult(CommandProtocolImpl.java:84) 
com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection$2.onResult(DefaultConnectionPool.java:530) 
com.mongodb.internal.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:142) c
om.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:48) 
com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:463) 
com.mongodb.internal.connection.InternalStreamConnection$2$1.onResult(InternalStreamConnection.java:440) 
com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:745) 
com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback$MessageCallback.onResult(InternalStreamConnection.java:712) 
com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:582) 
com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:579) 
com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:255) 
com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:214) 
com.mongodb.internal.connection.InternalStreamConnection.readAsync(InternalStreamConnection.java:579) 
com.mongodb.internal.connection.InternalStreamConnection.access$1100(InternalStreamConnection.java:78) 
com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:702) 
com.mongodb.internal.connection.InternalStreamConnection$MessageHeaderCallback.onResult(InternalStreamConnection.java:687) 
com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:582) 
com.mongodb.internal.connection.InternalStreamConnection$5.completed(InternalStreamConnection.java:579) 
com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:255) 
com.mongodb.connection.netty.NettyStream.readAsync(NettyStream.java:214) 
com.mongodb.connection.netty.NettyStream.handleReadResponse(NettyStream.java:285) 
com.mongodb.connection.netty.NettyStream.access$800(NettyStream.java:69) 
com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:344) 
com.mongodb.connection.netty.NettyStream$InboundBufferHandler.channelRead0(NettyStream.java:341) 
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 
io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1533) 
io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1282) 
io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1329) 
io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508) 
io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447) 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) 
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) 
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) 
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) 
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) java.base/java.lang.Thread.run(Thread.java:834)

More detailed errors in this gist: https://gist.github.com/ramiloif/0194f6c248dfe9885b12e7da5ffc28aa

Also in stack overflow: https://stackoverflow.com/questions/66553698/leak-bytebuf-release-was-not-called-before-its-garbage-collected-reactivem

Expected Behavior

my usage is pretty basic so I do not expect to get memory leak errors.

Actual Behavior

Getting LEAK: ByteBuf.release() was not called before it’s garbage-collected. from time to time as well as com.mongodb.MongoException: Subscription has already been terminated

Steps to Reproduce

Didn’t find specific way to reproduce the error happens from time to time, couldn’t relate it to any specific operation.

Possible Solution

Your Environment

  • Reactor version(s) used: spring boot version: 2.4.3 reactor-core: 3.4.3

spring-cloud-dependencies version: 2020.0.1

  • JVM version (java -version): 11
  • OS and version (eg. uname -a): adoptopenjdk/openjdk11:alpine

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Reactions:5
  • Comments:11 (6 by maintainers)

github_iconTop GitHub Comments

1reaction
ramiloifcommented, Mar 11, 2021

Ok, version 4.1.1

0reactions
rstoyanchevcommented, Mar 31, 2021

I believe if you can give us a fix we can re-deploy and see if error still occurs occasionally, as it does today

@rabiori there is a fix in the Spring Framework. Please, check https://github.com/spring-projects/spring-framework/issues/26746 and give it a try.

Read more comments on GitHub >

github_iconTop Results From Across the Web

LEAK: ByteBuf.release() was not called before it's garbage ...
I'm using ReactiveMongoRepository with Kotlin and I'm getting this memory leak error from time to time: StackTrace: LEAK: ByteBuf.release() ...
Read more >
netty/netty - Gitter
ResourceLeakDetector LEAK : ByteBuf.release() was not called before it's garbage-collected. See http://netty.io/wiki/reference-counted-objects.html for more ...
Read more >
LEAK: ByteBuf.release() was not called before it's garbage ...
Hi All, We are getting Leak related error when we start our application instance. The same error happened in 2.0.1 version and applied...
Read more >
LEAK: ByteBuf.release() was not called before it's garbage ...
Hi, I have a problem I have never encountered, so I need some help. My es cluster has two masters and four data...
Read more >
CSDN博客_leak: bytebuf.release() was not called before it's
原来的代码中没有对ByteBuff进行手动释放,导致内存泄漏。加上下面这句就可以了~
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found