日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java - 死锁 Dead Lock 定位分析

發布時間:2025/3/21 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java - 死锁 Dead Lock 定位分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Pre
  • jstack
  • Thread dump
  • Dead Lock 分析
  • 分析代碼
  • 解決

Pre

JVM-11虛擬機性能監控與故障處理工具之【JDK的可視化工具-JConsole】


jstack

jstack主要用來查看某個Java進程內的線程堆棧信息 ,建議多殺幾次線程dump ,每次都有某個事件,基本沒跑了~

用法也很簡單


Thread dump

Found one Java-level deadlock: ============================= "T-ShortConn-4":waiting to lock monitor 0x00007f87e1d95718 (object 0x00000006cc86c090, a java.lang.Class),which is held by "T-ShortConn-0" "T-ShortConn-0":waiting to lock monitor 0x00007f875c00f188 (object 0x00000006c6f34238, a java.util.concurrent.ConcurrentHashMap),which is held by "localhost-startStop-1" "localhost-startStop-1":waiting to lock monitor 0x00007f87e1d95718 (object 0x00000006cc86c090, a java.lang.Class),which is held by "T-ShortConn-0"Java stack information for the threads listed above: =================================================== "T-ShortConn-4":at com.artisan.bus.tool.redis.RedisClusterHelper.getClient(RedisClusterHelper.java:38)- waiting to lock <0x00000006cc86c090> (a java.lang.Class for com.artisan.bus.tool.redis.RedisClusterHelper)at com.artisan.bus.tool.redis.RedisClusterHelper.listOs(RedisClusterHelper.java:328)at com.artisan.bus.tool.redis.RedisClusterHelper.lSize(RedisClusterHelper.java:193)at com.artisan.bus.service.comunication.CommunicationService.send(CommunicationService.java:1922)at com.artisan.bus.service.comunication.CommunicationService$$FastClassBySpringCGLIB$$cacacc60.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)at com.artisan.bus.service.comunication.CommunicationService$$EnhancerBySpringCGLIB$$8902c097.send(<generated>)at net.artisan.manager.DataProcessorManager.send(DataProcessorManager.java:850)at net.artisan.manager.DataProcessorManager.processShortLinkData(DataProcessorManager.java:833)at net.artisan.common.ShortLinkProcessorThread.run(ShortLinkProcessorThread.java:22)at java.lang.Thread.run(Thread.java:748) "T-ShortConn-0":at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:187)- waiting to lock <0x00000006c6f34238> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:486)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:403)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:389)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1002)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:345)at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)at com.artisan.bus.tool.utils.SpringApplicationContext.getBean(SpringApplicationContext.java:31)at com.artisan.bus.tool.redis.RedisClusterHelper.getClient(RedisClusterHelper.java:40)- locked <0x00000006cc86c090> (a java.lang.Class for com.artisan.bus.tool.redis.RedisClusterHelper)at com.artisan.bus.tool.redis.RedisClusterHelper.listOs(RedisClusterHelper.java:328)at com.artisan.bus.tool.redis.RedisClusterHelper.lSize(RedisClusterHelper.java:193)at com.artisan.bus.service.comunication.CommunicationService.send(CommunicationService.java:1922)at com.artisan.bus.service.comunication.CommunicationService$$FastClassBySpringCGLIB$$cacacc60.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)at com.artisan.bus.service.comunication.CommunicationService$$EnhancerBySpringCGLIB$$8902c097.send(<generated>)at net.artisan.manager.DataProcessorManager.send(DataProcessorManager.java:850)at net.artisan.manager.DataProcessorManager.processShortLinkData(DataProcessorManager.java:833)at net.artisan.common.ShortLinkProcessorThread.run(ShortLinkProcessorThread.java:22)at java.lang.Thread.run(Thread.java:748) "localhost-startStop-1":at com.artisan.bus.tool.redis.RedisClusterHelper.getClient(RedisClusterHelper.java:38)- waiting to lock <0x00000006cc86c090> (a java.lang.Class for com.artisan.bus.tool.redis.RedisClusterHelper)at com.artisan.bus.tool.redis.RedisClusterHelper.del(RedisClusterHelper.java:63)at com.artisan.bus.dao.impl.settings.template.strategy.StrategyTemplateDao.cacheStrategyTemplate(StrategyTemplateDao.java:173)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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)at com.sun.proxy.$Proxy82.cacheStrategyTemplate(Unknown Source)at com.artisan.bus.service.impl.task.CheckTaskService.cacheStrategyTemplate(CheckTaskService.java:3658)at com.artisan.bus.service.impl.task.CheckTaskService$$FastClassBySpringCGLIB$$b794226f.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)at com.artisan.bus.service.impl.task.CheckTaskService$$EnhancerBySpringCGLIB$$7b018424.cacheStrategyTemplate(<generated>)at com.artisan.bus.web.filter.ApplicationConfigue.setApplicationContext(ApplicationConfigue.java:74)at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:121)at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:97)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)- locked <0x00000006c6f34238> (a java.util.concurrent.ConcurrentHashMap)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)- locked <0x00000006c6f655a8> (a java.lang.Object)at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138)at javax.servlet.GenericServlet.init(GenericServlet.java:158)at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1269)- locked <0x00000006c6d54a78> (a org.apache.catalina.core.StandardWrapper)at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1182)- locked <0x00000006c6d54a78> (a org.apache.catalina.core.StandardWrapper)at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1072)- locked <0x00000006c6d54a78> (a org.apache.catalina.core.StandardWrapper)at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5368)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5660)- locked <0x00000006c54f5f78> (a org.apache.catalina.core.StandardContext)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)- locked <0x00000006c54f5f78> (a org.apache.catalina.core.StandardContext)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Found 1 deadlock.

Dead Lock 分析

jstack 殺出來的線程堆棧, 劃重點~~~

Found one Java-level deadlock: ============================= "T-ShortConn-4":waiting to lock monitor 0x00007f87e1d95718 (object 0x00000006cc86c090, a java.lang.Class),which is held by "T-ShortConn-0" "T-ShortConn-0":waiting to lock monitor 0x00007f875c00f188 (object 0x00000006c6f34238, a java.util.concurrent.ConcurrentHashMap),which is held by "localhost-startStop-1" "localhost-startStop-1":waiting to lock monitor 0x00007f87e1d95718 (object 0x00000006cc86c090, a java.lang.Class),which is held by "T-ShortConn-0"Java stack information for the threads listed above: ===================================================

三個線程 T-ShortConn-4 、 T-ShortConn-0 和 localhost-startStop-1

看括號里面的 object xxxxxxx

  • T-ShortConn-4 想去獲取lock 【object 0x00000006cc86c090】 , 但這個lock被 T-ShortConn-0持有
  • T-ShortConn-0 想去獲取lock 【object 0x00000006c6f34238】 , 但這個lock被 localhost-startStop-1持有
  • localhost-startStop-1 想去獲取lock 【object 0x00000006cc86c090】 , 但這個lock被 T-ShortConn-0持有

====》得出結論

  • T-ShortConn-0 持有的lock 【0x00000006cc86c090】 被 T-ShortConn-4 和 localhost-startStop-1 需要

  • localhost-startStop-1 持有的lock 【0x00000006c6f34238】 被 T-ShortConn-0 需要

這不就產生deal lock了么?


分析代碼

T-ShortConn-0 持有的lock 【0x00000006cc86c090】 那就去dump中查找這個關鍵字吧

at com.artisan.bus.tool.utils.SpringApplicationContext.getBean(SpringApplicationContext.java:31)at com.artisan.bus.tool.redis.RedisClusterHelper.getClient(RedisClusterHelper.java:40)- locked <0x00000006cc86c090> (a java.lang.Class for com.artisan.bus.tool.redis.RedisClusterHelper)

localhost-startStop-1 持有的lock 【0x00000006c6f34238】


DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:187) 返回的是一個 ConcurrentHashMap , lock類型就是 ConcurrentHashMap。

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)- locked <0x00000006c6f34238> (a java.util.concurrent.ConcurrentHashMap)

解決

解決方法: 提前初始化RedisClusterHelper這個單例

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Java - 死锁 Dead Lock 定位分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.美色吧.com| 人妻精品一区 | 欧美日韩高清一区二区 国产亚洲免费看 | 熟女少妇精品一区二区 | 免费在线一级片 | 国产二级视频 | 在线成年人视频 | 中文字幕av久久 | 一区二区三区四区高清视频 | 福利在线一区 | 在线播放视频高清在线观看 | 天天操天天做 | av永久网站 | 免费黄色看片 | 婷婷激情在线 | 免费av网址在线观看 | av资源部 | 亚洲色图21p| 亚洲精视频| 午夜精品久久久久久久久久 | 按摩害羞主妇中文字幕 | 免费看欧美大片 | 久久爱一区| 亚洲成人影音 | 天天色天天射天天操 | 一区二区三区精 | 长篇高h肉爽文丝袜 | 嘿咻视频在线观看 | 免费福利视频网站 | 久久久久中文字幕亚洲精品 | 色综合色综合色综合 | 久久久无码精品亚洲国产 | 午夜免费视频观看 | 乱短篇艳辣500篇h文最新章节 | 黑帮大佬和我的三百六十五天 | 五月婷婷视频 | 久久精品黄 | 日韩成人在线免费观看 | 黑人性xxx | 天天操妹子 | 国产av一区二区三区最新精品 | 嫩草视频一区二区三区 | 免费美女av| 在线激情视频 | 日韩精品视频一区二区三区 | 一本一道精品欧美中文字幕 | 风间ゆみ大战黑人 | av播放网站| 欧美大片免费看 | 国产精品69久久久 | 永久免费在线播放 | 日日干av | 久久久噜噜噜久久 | 国产高清精品一区二区三区 | 白白色2012年最新视频 | 久久在线视频 | 欧美s码亚洲码精品m码 | 美女福利视频在线 | 午夜精品久久久久久久第一页按摩 | 成人做爰www看视频软件 | 亚洲精选免费 | 国产又粗又猛又爽又黄 | 最新地址在线观看 | 岛国av在线免费 | av白浆 | 免费av视屏 | 激情黄色av| 国产夫妻在线 | 免费福利在线 | 91伦理视频 | 色涩综合 | 久久国内免费视频 | 精品午夜福利视频 | 黄色片免费观看视频 | 秘密基地免费观看完整版中文 | 涩涩视频软件 | 国产精品国产三级国产专播精品人 | 四虎影院在线 | 成人av专区 | 隔壁人妻偷人bd中字 | 中文文字幕文字幕高清 | 自拍偷拍国产视频 | 苍井空浴缸大战猛男120分钟 | 粉嫩av蜜桃av蜜臀av | 日韩激情小视频 | 激情五月激情综合 | 午夜激情啪啪 | 国产精品扒开腿做爽爽爽男男 | 国产1区2区| 国产浮力第一页 | 视频一区二区三区在线 | 男女性生活毛片 | 久久久久国产一区二区三区潘金莲 | 欧洲美女毛片 | 精品日韩中文字幕 | 99re在线精品 | 日本第一页 | 法国空姐在线观看免费 | 国产黄色免费大片 |