reactor / reactor-netty

TCP/HTTP/UDP/QUIC client/server with Reactor over Netty
https://projectreactor.io
Apache License 2.0
2.58k stars 645 forks source link

[Bug] LEAK: ByteBuf.release() was not called before it's garbage-collected #3467

Open creatorone1 opened 1 week ago

creatorone1 commented 1 week ago

when I use spring webflux. discovered a memory leak error related to ByteBuf.release() not being called before it is garbage-collected. The error is traced to the AdvancedLeakAwareByteBuf.writeBytes method, leading to a long chain of method calls involving NettyDataBuffer, AbstractJackson2Encoder, FluxMapFuseable, and many others. The leaked memory is created at PooledByteBufAllocator.newDirectBuffer and results in a large number of write and flush operations in the event loop, ultimately affecting system performance.

Expected Behavior

no leak

Actual Behavior

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

Steps to Reproduce

sometimes,dont know why and how

2024-10-07 22:24:52.597 ERROR [-proxy-epoll-11] [ i.n.util.ResourceLeakDetector] [    reportTracedLeak] [319  ] [                                    ] 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.writeBytes(AdvancedLeakAwareByteBuf.java:611)
        org.springframework.core.io.buffer.NettyDataBuffer.write(NettyDataBuffer.java:177)
        org.springframework.core.io.buffer.NettyDataBuffer.write(NettyDataBuffer.java:43)
        org.springframework.http.codec.json.AbstractJackson2Encoder.encodeValue(AbstractJackson2Encoder.java:241)
        org.springframework.http.codec.json.AbstractJackson2Encoder.lambda$encode$3(AbstractJackson2Encoder.java:188)
        reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113)
        reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816)
        reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:129)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:230)
        reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
        reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.Operators.complete(Operators.java:137)
        reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46)
        reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
        reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:299)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onComplete(FluxPeekFuseable.java:277)
        reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:299)
        reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
        reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:230)
        reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.netty.FutureMono$FutureSubscription.operationComplete(FutureMono.java:196)
        io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
        io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)
        io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)
        io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
        io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
        io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
        io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
        io.netty.util.concurrent.PromiseCombiner.tryPromise(PromiseCombiner.java:170)
        io.netty.util.concurrent.PromiseCombiner.access$600(PromiseCombiner.java:35)
        io.netty.util.concurrent.PromiseCombiner$1.operationComplete0(PromiseCombiner.java:62)
        io.netty.util.concurrent.PromiseCombiner$1.operationComplete(PromiseCombiner.java:44)
        io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
        io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
        io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
        io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
        io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
        io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
        io.netty.util.internal.PromiseNotificationUtil.trySuccess(PromiseNotificationUtil.java:48)
        io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:717)
        io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:272)
        io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:352)
        io.netty.channel.epoll.AbstractEpollStreamChannel.writeBytesMultiple(AbstractEpollStreamChannel.java:305)
        io.netty.channel.epoll.AbstractEpollStreamChannel.doWriteMultiple(AbstractEpollStreamChannel.java:510)
        io.netty.channel.epoll.AbstractEpollStreamChannel.doWrite(AbstractEpollStreamChannel.java:422)
        io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:931)
        io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.flush0(AbstractEpollChannel.java:557)
        io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:895)
        io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
        io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
        io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.flush(CombinedChannelDuplexHandler.java:531)
        io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:125)
        io.netty.channel.CombinedChannelDuplexHandler.flush(CombinedChannelDuplexHandler.java:356)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
        io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
        io.netty.channel.ChannelDuplexHandler.flush(ChannelDuplexHandler.java:127)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
        io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:765)
        io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1071)
        io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
        io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
        io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
        io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:403)
        io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        java.lang.Thread.run(Thread.java:879)
Created at:
        io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:403)
        io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188)
        io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:179)
        io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:116)
        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:240)
        org.springframework.http.codec.json.AbstractJackson2Encoder.lambda$encode$3(AbstractJackson2Encoder.java:188)
        reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113)
        reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816)
        reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:129)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:230)
        reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
        reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:209)
        reactor.core.publisher.Operators.complete(Operators.java:137)
        reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46)
        reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240)
        reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)
        reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128)
        reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
        reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:299)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onComplete(FluxPeekFuseable.java:277)
        reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:299)
        reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
        reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:230)
        reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
        reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:196)
        reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:268)
        reactor.netty.FutureMono$FutureSubscription.operationComplete(FutureMono.java:196)
        io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
        io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)
        io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)
        io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
        io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
        io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
        io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
        io.netty.util.concurrent.PromiseCombiner.tryPromise(PromiseCombiner.java:170)
        io.netty.util.concurrent.PromiseCombiner.access$600(PromiseCombiner.java:35)
        io.netty.util.concurrent.PromiseCombiner$1.operationComplete0(PromiseCombiner.java:62)
        io.netty.util.concurrent.PromiseCombiner$1.operationComplete(PromiseCombiner.java:44)
        io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
        io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
        io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
        io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
        io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
        io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
        io.netty.util.internal.PromiseNotificationUtil.trySuccess(PromiseNotificationUtil.java:48)
        io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:717)
        io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:272)
        io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:352)
        io.netty.channel.epoll.AbstractEpollStreamChannel.writeBytesMultiple(AbstractEpollStreamChannel.java:305)
        io.netty.channel.epoll.AbstractEpollStreamChannel.doWriteMultiple(AbstractEpollStreamChannel.java:510)
        io.netty.channel.epoll.AbstractEpollStreamChannel.doWrite(AbstractEpollStreamChannel.java:422)
        io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:931)
        io.netty.util.concurrent.PromiseCombiner$1.operationComplete(PromiseCombiner.java:44)
        io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
        io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
        io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
        io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
        io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
        io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
        io.netty.util.internal.PromiseNotificationUtil.trySuccess(PromiseNotificationUtil.java:48)
        io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:717)
        io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:272)
        io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:352)
        io.netty.channel.epoll.AbstractEpollStreamChannel.writeBytesMultiple(AbstractEpollStreamChannel.java:305)
        io.netty.channel.epoll.AbstractEpollStreamChannel.doWriteMultiple(AbstractEpollStreamChannel.java:510)
        io.netty.channel.epoll.AbstractEpollStreamChannel.doWrite(AbstractEpollStreamChannel.java:422)
        io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:931)
        io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.flush0(AbstractEpollChannel.java:557)
        io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:895)
        io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
        io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
        io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.flush(CombinedChannelDuplexHandler.java:531)
        io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:125)
        io.netty.channel.CombinedChannelDuplexHandler.flush(CombinedChannelDuplexHandler.java:356)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
        io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
        io.netty.channel.ChannelDuplexHandler.flush(ChannelDuplexHandler.java:127)
        io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
        io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:765)
        io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1071)
        io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
        io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
        io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
        io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:403)
        io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        java.lang.Thread.run(Thread.java:879)

Possible Solution

dont known

Your Environment

violetagg commented 1 week ago

@creatorone1 Your Reactor Netty version is very old (reactorNettyVersion=1.0.23) and not supported anymore. Please update to a supported version (more info here)

creatorone1 commented 1 week ago

@creatorone1 Your Reactor Netty version is very old (reactorNettyVersion=1.0.23) and not supported anymore. Please update to a supported version (more info here)

thx, which version should i use?

violetagg commented 1 week ago

@creatorone1 1.1.22 is the latest one, but I would recommend to update your Spring Boot version as fixes related to memory leaks are also done in Spring Framework

creatorone1 commented 1 week ago

@creatorone1 1.1.22 is the latest one, but I would recommend to update your Spring Boot version as fixes related to memory leaks are also done in Spring Framework

thx, when request or response body is very large(over than 5MB), This memo leak problem more likely happen.

github-actions[bot] commented 1 day ago

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.