LEAK: ByteBuf.release() Netty引起的堆外内存溢出报错

最终解决方式:升级spring cloud版本和spring boot版本
因为我的框架一直使用的是H版,
所以spring cloud升级到了 Hoxton.SR12
对应的spring boot是 : 2.3.12.RELEASE

1、异常信息:

两类报错:

1.1、运行过程中:

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

2022-09-13 16:24:45,492 - ERROR #[springAppName_IS_UNDEFINED,,,]# [reactor-http-epoll-2] i.n.u.ResourceLeakDetector [ResourceLeakDetector.java:320]: 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:363)
	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187)
	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:178)
	io.netty.channel.unix.PreferredDirectByteBufAllocator.ioBuffer(PreferredDirectByteBufAllocator.java:53)
	io.netty.channel.DefaultMaxMessagesRecvByteBufAllocator$MaxMessageHandle.allocate(DefaultMaxMessagesRecvByteBufAllocator.java:114)
	io.netty.channel.epoll.EpollRecvByteAllocatorHandle.allocate(EpollRecvByteAllocatorHandle.java:75)
	io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:777)
	io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475)
	io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
	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.lang.Thread.run(Thread.java:748)
2022-09-28 09:32:11,439 - ERROR #[springAppName_IS_UNDEFINED,,,]# [reactor-http-epoll-4] i.n.u.ResourceLeakDetector [ResourceLeakDetector.java:320]: 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.SimpleLeakAwareByteBuf.unwrappedDerived(SimpleLeakAwareByteBuf.java:143)
	io.netty.buffer.SimpleLeakAwareByteBuf.readRetainedSlice(SimpleLeakAwareByteBuf.java:67)
	io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:376)
	io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:225)
	io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
	io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
	io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
	io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
	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.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792)
	io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:475)
	io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
	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.lang.Thread.run(Thread.java:748)

1.2、最终内存溢出报错:

2022-02-11 09:43:51,268 -  ## [http-nio-8001-exec-4]   user token auth error:Redis exception; nested exception is io.lettuce.core.RedisException: io.netty.handler.codec.EncoderException: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 1090519047, max: 1090715648) 
org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: io.netty.handler.codec.EncoderException: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 1090519047, max: 1090715648) 
	at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:74) 
	at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) 
	at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44) 
	at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42) 
	at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:273) 
	at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.convertLettuceAccessException(LettuceStringCommands.java:799) 
	at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.pSetEx(LettuceStringCommands.java:259) 
	at org.springframework.data.redis.connection.DefaultedRedisConnection.pSetEx(DefaultedRedisConnection.java:315) 
	at org.springframework.data.redis.connection.DefaultStringRedisConnection.pSetEx(DefaultStringRedisConnection.java:1018) 
	at org.springframework.data.redis.core.DefaultValueOperations$4.failsafeInvokePsetEx(DefaultValueOperations.java:276) 
	at org.springframework.data.redis.core.DefaultValueOperations$4.potentiallyUsePsetEx(DefaultValueOperations.java:267) 
	at org.springframework.data.redis.core.DefaultValueOperations$4.doInRedis(DefaultValueOperations.java:261) 
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:228) 
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) 
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) 
	at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:256) 
	at org.springframework.cloud.gateway.handler.FilteringWebHandler$GatewayFilterAdapter.filter(FilteringWebHandler.java:138) 
	at org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44) 
	at org.springframework.cloud.gateway.handler.FilteringWebHandler$DefaultGatewayFilterChain.lambda$filter$0(FilteringWebHandler.java:118) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.MonoIgnorePublisher.subscribe(MonoIgnorePublisher.java:56) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) 
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) 
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) 
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) 
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) 
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) 
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:274) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:851) 
	at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114) 
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) 
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1782) 
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144) 
	at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114) 
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:274) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:851) 
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73) 
	at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:173) 
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1782) 
	at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onNext(MonoFilterWhen.java:140) 
	at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2344) 
	at reactor.core.publisher.MonoFilterWhen$MonoFilterWhenMain.onSubscribe(MonoFilterWhen.java:103) 
	at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:441) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onNext(FluxConcatMap.java:243) 
	at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:91) 
	at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onNext(FluxDematerialize.java:38) 
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:267) 
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:225) 
	at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.request(FluxDematerialize.java:120) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:228) 
	at reactor.core.publisher.FluxDematerialize$DematerializeSubscriber.onSubscribe(FluxDematerialize.java:70) 
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:161) 
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) 
	at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:62) 
	at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:441) 
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:211) 
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:161) 
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:86) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) 
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) 
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) 
	at reactor.core.publisher.Mono.subscribe(Mono.java:4213) 
	at org.springframework.http.server.reactive.ServletHttpHandlerAdapter.service(ServletHttpHandlerAdapter.java:192) 
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 
	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747) 
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) 
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) 
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
	at java.lang.Thread.run(Thread.java:748) 
Caused by: io.lettuce.core.RedisException: io.netty.handler.codec.EncoderException: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 1090519047, max: 1090715648) 
	at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:134) 
	at io.lettuce.core.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:75) 
	at io.lettuce.core.internal.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:79) 
	at com.sun.proxy.$Proxy185.psetex(Unknown Source) 
	at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.pSetEx(LettuceStringCommands.java:257) 
	... 115 common frames omitted 
Caused by: io.netty.handler.codec.EncoderException: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 1090519047, max: 1090715648) 
	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:125) 
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) 
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709) 
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792) 
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702) 
	at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:446) 
	at io.lettuce.core.protocol.CommandHandler.write(CommandHandler.java:378) 
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) 
	at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:764) 
	at io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1071) 
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) 
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) 
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384) 
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) 
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 
	... 1 common frames omitted 
Caused by: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 1090519047, max: 1090715648) 
	at io.netty.util.internal.PlatformDependent.incrementMemoryCounter(PlatformDependent.java:754) 
	at io.netty.util.internal.PlatformDependent.allocateDirectNoCleaner(PlatformDependent.java:709) 
	at io.netty.buffer.PoolArena$DirectArena.allocateDirect(PoolArena.java:755) 
	at io.netty.buffer.PoolArena$DirectArena.newChunk(PoolArena.java:731) 
	at io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:247) 
	at io.netty.buffer.PoolArena.allocate(PoolArena.java:215) 
	at io.netty.buffer.PoolArena.reallocate(PoolArena.java:394) 
	at io.netty.buffer.PooledByteBuf.capacity(PooledByteBuf.java:118) 
	at io.netty.buffer.AbstractByteBuf.ensureWritable0(AbstractByteBuf.java:306) 
	at io.netty.buffer.AbstractByteBuf.ensureWritable(AbstractByteBuf.java:282) 
	at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1104) 
	at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1097) 
	at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1088) 
	at io.lettuce.core.protocol.CommandArgs$ByteBufferArgument.writeByteBuf(CommandArgs.java:479) 
	at io.lettuce.core.protocol.CommandArgs$ValueArgument.encode(CommandArgs.java:719) 
	at io.lettuce.core.protocol.CommandArgs.encode(CommandArgs.java:347) 
	at io.lettuce.core.protocol.Command.encode(Command.java:124) 
	at io.lettuce.core.protocol.AsyncCommand.encode(AsyncCommand.java:183) 
	at io.lettuce.core.protocol.CommandEncoder.encode(CommandEncoder.java:93) 
	at io.lettuce.core.protocol.CommandEncoder.encode(CommandEncoder.java:78) 
	at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) 
	... 16 common frames omitted 

2、解决办法

2.1、尝试查找定位泄露位置,添加release

未解决。定位到的泄露点并非是自己的代码,所以也没有地方可以添加release();

info.readBytes(message);
String data = ByteArrayToString.byteArrayToHexString(message);
        // 读完就释放
info.release();

2.2、以为是redis问题,修改netty

未解决,无论是修改netty版本,甚至去掉redis,都还是会有异常信息:

[reactor-http-epoll-4] i.n.u.ResourceLeakDetector [ResourceLeakDetector.java:320]: LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.

2.3、肯定是netty问题,查看到webflux依赖了netty包

定位到报错的包是netty相关的,所以排除了netty包,但是启动报错,仔细看了一下,发现是因为spring-boot-starter-weflux依赖了netty相关包,而spring-cloud-starter-gateway依赖了spring-boot-starter-weflux。
所以,可能是spring-cloud和spring-boot版本兼容问题。查看官网版本依赖。升级了相关版本。

版本依赖要求:https://docs.spring.io/spring-cloud/docs/Hoxton.SR12/reference/html/

Release Train Version: Hoxton.SR12
Supported Boot Version: 2.3.12.RELEASE
springcloud版本依赖:

猜你喜欢

转载自blog.csdn.net/wl1985xy/article/details/127088274
今日推荐