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

  • spingboot-stater-webflux:2.7.4
  • reactor-netty-http: 1.0.23
  • netty-xxx: 4.1.82.Final
  • java: 1.8

Comment From: bclozel

Thanks for this report but Spring Boot 2.7.x is not OSS supported anymore. Please upgrade to a supported version.

Comment From: creatorone1

Thanks for this report but Spring Boot 2.7.x is not OSS supported anymore. Please upgrade to a supported version.

The bug can be fixed by upgrade version to 3.x ?

Comment From: bclozel

@creatorone1 Maybe, we fixed quite a few things since Spring Boot 2.7.4. The latest OSS release for Spring Boot 2.7.x is 2.7.18. Before reporting a bug, you should always be on the latest maintenance version anyway. If you can reproduce this issue with a supported version, we'll have a look.

Comment From: creatorone1

@creatorone1 Maybe, we fixed quite a few things since Spring Boot 2.7.4. The latest OSS release for Spring Boot 2.7.x is 2.7.18. Before reporting a bug, you should always be on the latest maintenance version anyway. If you can reproduce this issue with a supported version, we'll have a look.

thx,i will try to upgrade.