Affects: \<5.3.27>
The problem comes from https://github.com/spring-projects/spring-framework/issues/26464#issuecomment-2257291515, Because the issue was closed, I have to submit a new one.
When my server app(org.springframework.boot:spring-boot-starter-parent:2.5.15) runs for a while, there are more and more threads hanged at : SimpMessagingTemplate.convertAndSendToUser, one of a thread's stack shows as bellows:
"http-nio-27200-exec-1" #178 daemon prio=5 os_prio=0 cpu=3088.49ms elapsed=1837.58s tid=0x00007fb18ba9a000 nid=0x2c236f waiting on condition [0x00007fae6e19e000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@11/Native Method)
- parking to wait for <0x00000005b7a00020> (a java.util.concurrent.CompletableFuture$Signaller)
at java.util.concurrent.locks.LockSupport.park(java.base@11/LockSupport.java:194)
at java.util.concurrent.CompletableFuture$Signaller.block(java.base@11/CompletableFuture.java:1796)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@11/ForkJoinPool.java:3128)
at java.util.concurrent.CompletableFuture.waitingGet(java.base@11/CompletableFuture.java:1823)
at java.util.concurrent.CompletableFuture.get(java.base@11/CompletableFuture.java:1998)
at org.springframework.util.concurrent.CompletableToListenableFutureAdapter.get(CompletableToListenableFutureAdapter.java:99)
at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler$SystemSessionConnectionHandler.forward(StompBrokerRelayMessageHandler.java:1087)
at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.handleMessageInternal(StompBrokerRelayMessageHandler.java:605)
at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.handleMessage(AbstractBrokerMessageHandler.java:281)
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144)
at org.springframework.messaging.support.ExecutorSubscribableChannel.sendInternal(ExecutorSubscribableChannel.java:100)
at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:139)
at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:125)
at org.springframework.messaging.simp.SimpMessagingTemplate.sendInternal(SimpMessagingTemplate.java:187)
at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:162)
at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:48)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:109)
at org.springframework.messaging.simp.user.UserDestinationMessageHandler$BroadcastHandler.handleUnresolved(UserDestinationMessageHandler.java:300)
at org.springframework.messaging.simp.user.UserDestinationMessageHandler.handleMessage(UserDestinationMessageHandler.java:202)
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144)
at org.springframework.messaging.support.ExecutorSubscribableChannel.sendInternal(ExecutorSubscribableChannel.java:100)
at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:139)
at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:125)
at org.springframework.messaging.simp.SimpMessagingTemplate.sendInternal(SimpMessagingTemplate.java:187)
at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:179)
at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:48)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:109)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:151)
at org.springframework.messaging.simp.SimpMessagingTemplate.convertAndSendToUser(SimpMessagingTemplate.java:231)
at org.springframework.messaging.simp.SimpMessagingTemplate.convertAndSendToUser(SimpMessagingTemplate.java:211)
at com.cyou.dream.service.impl.ClientMessageServiceImpl.sendMessage(ClientMessageServiceImpl.java:69)
at com.cyou.dream.dao.impl.PlayerFansDataDaoImpl.savePlayerFollowingData(PlayerFansDataDaoImpl.java:526)
at com.cyou.dream.dao.impl.PlayerFansDataDaoImpl$$FastClassBySpringCGLIB$$5ecaf825.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
at com.cyou.dream.dao.impl.PlayerFansDataDaoImpl$$EnhancerBySpringCGLIB$$b00fddec.savePlayerFollowingData(<generated>)
at com.cyou.dream.service.impl.PlayerFansServiceImpl.addFollowing(PlayerFansServiceImpl.java:286)
at com.cyou.dream.controller.PlayerFansController.following(PlayerFansController.java:165)
at jdk.internal.reflect.GeneratedMethodAccessor431.invoke(Unknown Source)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@11/Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAd
Comment From: bclozel
As explained in the other issue, this was a bug in the reactor library, not Spring Framework.
Comment From: pcloves
As explained in the other issue, this was a bug in the reactor library, not Spring Framework.
Yes, indeed, I have upgraded my spring-boot to the newest spring boot version of 2.5.x(which is 2.5.15), which use the dependency version of reactor-netty-core is 1.0.32. However, as https://github.com/reactor/reactor-netty/issues/1684 says, the bug was fixed in 1.0.9, I have no idea why it is reproduced in my server, I have try my best studying two whole days, hoping someone would help me.
Comment From: bclozel
Again, we can only provide free support if you are on an OSS supported version.
Comment From: pcloves
Again, we can only provide free support if you are on an OSS supported version.
Yes, thanks for replying. I'm trying upgrade Spring Boot to the latest version of 2.