You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CAS v7.0.0重启间歇性死锁问题求助(从v6.6.2迁移后)

CAS v7.0.0重启间歇性卡顿与死锁问题求助

近期将应用从CAS v6.6.2迁移至v7.0.0后,遇到重启时间歇性卡顿的问题,线程dump中检测到明确的死锁。

已尝试以下解决方案,但均无效果:

  • 设置lazy initialization为false
  • 创建过滤器在启动阶段拦截所有请求
  • 延迟Dispatcher Servlet初始化

目前怀疑问题根源在于CAS v7.0.0中广泛使用的@RefreshScope与@Lazy注解组合,该判断基于Spring相关Issue中的死锁场景——其附件里的死锁情况与我们的线程dump完全一致。

线程dump堆栈信息如下:

Found one Java-level deadlock:
=============================
"Thread-10":
  waiting to lock monitor 0x000000001fec2c78 (object 0x000000076fd80250, a java.lang.String),
  which is held by "Thread-5"
"Thread-5":
  waiting to lock monitor 0x000000001be39628 (object 0x000000076fd7ba88, a java.util.concurrent.ConcurrentHashMap),
  which is held by "Thread-10"

Java stack information for the threads listed above:
===================================================
"Thread-10":
    at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:380)
    - waiting to lock <0x000000076fd80250> (a java.lang.String)
    at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:183)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:350)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
    at my.project.name.RefreshScopeDeadLock$FakeSampler$$EnhancerBySpringCGLIB$$212b6f8d.doSomething(<generated>)
    at my.project.name.RefreshScopeDeadLock$InCreationBean.accessFakesampler(RefreshScopeDeadLock.java:99)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:308)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1694)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
    at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$8/556529265.getObject(Unknown Source)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    - locked <0x000000076fd7ba88> (a java.util.concurrent.ConcurrentHashMap)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:224)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1015)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:339)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1107)
    at my.project.name.RefreshScopeDeadLock.lambda$0(RefreshScopeDeadLock.java:27)
    at my.project.name.RefreshScopeDeadLock$$Lambda$57/1367937032.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)
"Thread-5":
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:185)
    - waiting to lock <0x000000076fd7ba88> (a java.util.concurrent.ConcurrentHashMap)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:490)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:427)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:398)
    at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1276)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:470)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1250)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:541)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$1(AbstractBeanFactory.java:353)
    at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$59/1420933976.getObject(Unknown Source)
    at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:382)
    - locked <0x000000076fd80250> (a java.lang.String)
    at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:183)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:350)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
    at my.project.name.RefreshScopeDeadLock$FakeSampler$$EnhancerBySpringCGLIB$$212b6f8d.doSomething(<generated>)
    at my.project.name.RefreshScopeDeadLock$AlreadyCreatedBean.accessFakesampler(RefreshScopeDeadLock.java:85)
    at my.project.name.RefreshScopeDeadLock$$Lambda$56/575935098.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)

Found 1 deadlock.

恳请各位提供可行的解决方案。

内容的提问来源于stack exchange,提问作者Shavi Teotia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:13:15