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.