snowdrop / vertx-spring-boot

Vert.x Spring Boot integration brings different Vert.x components to Spring Boot ecosystem
Apache License 2.0
137 stars 41 forks source link

ERROR io.netty.util.ResourceLeakDetector - LEAK #118

Closed hogmuzzle closed 2 years ago

hogmuzzle commented 2 years ago

I tried to use Vertx with reactor Webflux everything works but there is a memory leak and the app crashes after some time.

boundedElastic-9] ERROR io.netty.util.ResourceLeakDetector - 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:401) 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:236) org.springframework.http.codec.json.AbstractJackson2Encoder.lambda$encode$0(AbstractJackson2Encoder.java:150) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:169) reactor.core.publisher.MonoSingle$SingleSubscriber.doOnRequest(MonoSingle.java:103) reactor.core.publisher.Operators$MonoInnerProducerBase.request(Operators.java:2731) reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2194) reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2068) reactor.core.publisher.MonoSingle$SingleSubscriber.onSubscribe(MonoSingle.java:115) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96) reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:249) reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:101) reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:127) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:127) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:127) reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846) reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:608) reactor.core.publisher.FluxFlatMap$FlatMapMain.innerComplete(FluxFlatMap.java:894) reactor.core.publisher.FluxFlatMap$FlatMapInner.onComplete(FluxFlatMap.java:997) reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1799) reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:251) reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:336) reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:127) reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:251) reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)

Sgitario commented 2 years ago

I tried to reproduce this issue and could not find any memory leak (at least, using Spring Boot 2.7.3 and Vert.x 4.3.3 (future release of Vert.x Spring Boot 1.5.0). What I did was to run the sample of vertx-http and call the endpoint up to 100000 times. Checking the differences in the memory analyzed, I could not find any memory leak. If you are using other components or you have a reproducer, please share it here and re-open the ticket.

hogmuzzle commented 2 years ago

All is fine. There was a bug in Spring Boot