-
Notifications
You must be signed in to change notification settings - Fork 357
Closed
Description
We observe the following leak reported by Netty 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:
#1:
io.netty.buffer.AdvancedLeakAwareByteBuf.getShort(AdvancedLeakAwareByteBuf.java:166)
io.rsocket.buffer.AbstractTupleByteBuf._getShort(AbstractTupleByteBuf.java:85)
io.netty.buffer.AbstractByteBuf.readShort(AbstractByteBuf.java:751)
io.rsocket.frame.FrameHeaderFlyweight.nativeFrameType(FrameHeaderFlyweight.java:89)
io.rsocket.resume.ResumableDuplexConnection.isResumableFrame(ResumableDuplexConnection.java:366)
io.rsocket.resume.ResumableDuplexConnection.sendFrame(ResumableDuplexConnection.java:221)
io.rsocket.resume.ResumableDuplexConnection.dispatch(ResumableDuplexConnection.java:241)
io.rsocket.resume.UpstreamFramesSubscriber.processFrame(UpstreamFramesSubscriber.java:156)
io.rsocket.resume.UpstreamFramesSubscriber.onNext(UpstreamFramesSubscriber.java:73)
io.rsocket.resume.UpstreamFramesSubscriber.onNext(UpstreamFramesSubscriber.java:32)
reactor.core.publisher.StrictSubscriber.onNext(StrictSubscriber.java:89)
reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:695)
reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:571)
reactor.core.publisher.FluxFlatMap$FlatMapInner.onNext(FluxFlatMap.java:971)
io.rsocket.internal.UnboundedProcessor.drainFused(UnboundedProcessor.java:144)
io.rsocket.internal.UnboundedProcessor.drain(UnboundedProcessor.java:177)
io.rsocket.internal.UnboundedProcessor.onNext(UnboundedProcessor.java:255)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:461)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:447)
reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
io.rsocket.internal.RateLimitableRequestPublisher$InnerOperator.onNext(RateLimitableRequestPublisher.java:173)
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480)
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:415)
reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
reactor.core.publisher.FluxCreate$SerializedSink.next(FluxCreate.java:153)
xxx.xxxx.lambda$listXXX$1(XXXXService.java:74)
java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)
#2:
io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
io.rsocket.frame.DataAndMetadataFlyweight.encodeLength(DataAndMetadataFlyweight.java:21)
io.rsocket.frame.DataAndMetadataFlyweight.encode(DataAndMetadataFlyweight.java:47)
io.rsocket.frame.RequestFlyweight.encode(RequestFlyweight.java:59)
io.rsocket.frame.PayloadFrameFlyweight.encodeNext(PayloadFrameFlyweight.java:56)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:453)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:447)
reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
io.rsocket.internal.RateLimitableRequestPublisher$InnerOperator.onNext(RateLimitableRequestPublisher.java:173)
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480)
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:415)
reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
reactor.core.publisher.FluxCreate$SerializedSink.next(FluxCreate.java:153)
xxx.xxxx.lambda$listXXX$1(XXXXService.java:74)
java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)
#3:
io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
io.rsocket.frame.DataAndMetadataFlyweight.encodeLength(DataAndMetadataFlyweight.java:19)
io.rsocket.frame.DataAndMetadataFlyweight.encode(DataAndMetadataFlyweight.java:47)
io.rsocket.frame.RequestFlyweight.encode(RequestFlyweight.java:59)
io.rsocket.frame.PayloadFrameFlyweight.encodeNext(PayloadFrameFlyweight.java:56)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:453)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:447)
reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
io.rsocket.internal.RateLimitableRequestPublisher$InnerOperator.onNext(RateLimitableRequestPublisher.java:173)
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480)
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:415)
reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
reactor.core.publisher.FluxCreate$SerializedSink.next(FluxCreate.java:153)
xxx.xxxx.lambda$listXXX$1(XXXXService.java:74)
java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)
#4:
io.netty.buffer.AdvancedLeakAwareByteBuf.writeShort(AdvancedLeakAwareByteBuf.java:550)
io.rsocket.frame.FrameHeaderFlyweight.encode(FrameHeaderFlyweight.java:56)
io.rsocket.frame.RequestFlyweight.encode(RequestFlyweight.java:50)
io.rsocket.frame.PayloadFrameFlyweight.encodeNext(PayloadFrameFlyweight.java:56)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:453)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:447)
reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
io.rsocket.internal.RateLimitableRequestPublisher$InnerOperator.onNext(RateLimitableRequestPublisher.java:173)
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480)
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:415)
reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
reactor.core.publisher.FluxCreate$SerializedSink.next(FluxCreate.java:153)
xxx.xxxx.lambda$listXXX$1(XXXXService.java:74)
java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)
#5:
io.netty.buffer.AdvancedLeakAwareByteBuf.writeInt(AdvancedLeakAwareByteBuf.java:562)
io.rsocket.frame.FrameHeaderFlyweight.encode(FrameHeaderFlyweight.java:56)
io.rsocket.frame.RequestFlyweight.encode(RequestFlyweight.java:50)
io.rsocket.frame.PayloadFrameFlyweight.encodeNext(PayloadFrameFlyweight.java:56)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:453)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:447)
reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
io.rsocket.internal.RateLimitableRequestPublisher$InnerOperator.onNext(RateLimitableRequestPublisher.java:173)
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480)
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:415)
reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
reactor.core.publisher.FluxCreate$SerializedSink.next(FluxCreate.java:153)
xxx.xxxx.lambda$listXXX$1(XXXXService.java:74)
java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)
Created at:
io.netty.buffer.PooledByteBufAllocator.newHeapBuffer(PooledByteBufAllocator.java:332)
io.netty.buffer.AbstractByteBufAllocator.heapBuffer(AbstractByteBufAllocator.java:168)
io.netty.buffer.AbstractByteBufAllocator.heapBuffer(AbstractByteBufAllocator.java:154)
io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:109)
io.rsocket.frame.FrameHeaderFlyweight.encode(FrameHeaderFlyweight.java:56)
io.rsocket.frame.RequestFlyweight.encode(RequestFlyweight.java:50)
io.rsocket.frame.PayloadFrameFlyweight.encodeNext(PayloadFrameFlyweight.java:56)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:453)
io.rsocket.RSocketResponder$3.hookOnNext(RSocketResponder.java:447)
reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
io.rsocket.internal.RateLimitableRequestPublisher$InnerOperator.onNext(RateLimitableRequestPublisher.java:173)
reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:480)
reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:415)
reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:793)
reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:718)
reactor.core.publisher.FluxCreate$SerializedSink.next(FluxCreate.java:153)
xxx.xxxx.lambda$listXXX$1(XXXXService.java:74)
java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)
: 1 leak records were discarded because the leak record count is targeted to 4. Use system property io.netty.leakDetection.targetRecords to increase the limit.