当前位置: 首页 > news >正文

ppt做的模板下载网站有哪些内容专业放心关键词优化参考价格

ppt做的模板下载网站有哪些内容,专业放心关键词优化参考价格,意识形态加强网站建设,设计师需要学历吗现象描述:Spring Boot项目,启动的时候卡住了,一直卡在那里不动,没有报错,也没有日志输出 但是,奇怪的是,本地可以正常启动 好吧,姑且先不深究为什么本地可以启动而部署到服务器上就无…

现象描述:Spring Boot项目,启动的时候卡住了,一直卡在那里不动,没有报错,也没有日志输出

但是,奇怪的是,本地可以正常启动

好吧,姑且先不深究为什么本地可以启动而部署到服务器上就无法启动的问题,这个不是重点,重点是怎么让它启动起来。(PS:我猜测可能是环境不同造成的,包括操作系统不同和JDK版本不同)

遇到这种情况,我先用jstack查看堆栈情况,果然发现了死锁

拿到jstack的完整信息,然后仔细排查,看不懂的话也可以借助工具

分析了每个被阻塞的线程之后,发现main线程和timeoutChecker_1_1互相等待对方持有的锁,从而形成了死锁

可以通过 jconsole 和 jvisualvm 查看

需要注意,如果是查看远程进程,则需要加一些启动参数

  • -Dcom.sun.management.jmxremote:启用JMX
  • -Dcom.sun.management.jmxremote.port=<端口号>:指定JMX远程连接的端口号
  • -Dcom.sun.management.jmxremote.authenticate=false:禁用JMX远程连接的认证
  • -Dcom.sun.management.jmxremote.ssl=false:禁用JMX远程连接的SSL加密

于是,我又重启启动

java -jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false app.jar

通过jps或者ps命令查找应用的pid

用jvisualvm查看也可以,不再赘述,结果都是一样的

好了,工具介绍到此为止,下面重点看代码

main线程持有<0x00000000c07a33d8>这个对象的锁,同时它还需要<0x00000000ff295ca8>对象的锁,而timeoutChecker_1_1线程正好相反,于是死锁了

main线程很好理解,就是我们这个SpringBoot应用的主线程,但是timeoutChecker_1_1线程是哪儿来的呢,通过分析发现它来自Seata

对了,该项目中Spring Boot版本是2.6.6,Seata版本是1.4.2

找到timeoutChecker的出处了

延迟60秒启动定时任务,每隔10秒执行一次,调用io.seata.core.rpc.netty.NettyClientChannelManager#reconnect()

记住这一行,首先调用RegistryFactory.getInstance()获取一个RegistryService,然后调用RegistryService对象的lookup()方法

接着看1.4.2

最重要的是 EnhancedServiceLoader.load(ExtConfigurationProvider.class).provide(configuration);

所以,ExtConfigurationProvider 是 SpringBootConfigurationProvider

回到seata-1.4.2,可以看到这里调用了applicationContext.getBean(),于是DefaultListableBeanFactory.getBean()

可以看到,getSingletonFactoryBeanForTypeCheck()方法里,对singletonObjects加了同步锁

凡是通过DefaultSingletonBeanRegistry#getSingleton()获取单例Bean的都会先对singletonObjects加锁

接下来看lookup

可以看到,NacosRegistryServiceImpl的lookup()这里也加了锁。另外,getNamingProperties()的时候由于再次用到了ConfigurationFactory.CURRENT_FILE_INSTANCE,所以又到了SpringBootConfigurationProvider#provide()

至此,Seata整个定时任务启动的主要逻辑我们都梳理完了,几处加锁的也都找到了

这些加锁的地方也就是容易出现死锁的地方

死锁是由于加锁顺序不一致造成的

下面看main线程启动

由于SeataDataSourceBeanPostProcessor实现了BeanPostProcessor接口,所以在创建容器之后会回调其postProcessAfterInitialization()方法

所以,最终还是调NettyClientChannelManager#reconnect()

Spring启动的时候去创建Spring容器,后面就是Spring那一套

ConfigurableApplicationContext#refresh()

ServletWebServerApplicationContext#refresh()

不再赘述

由于需要注入依赖,所以,这个过程中肯定会多次调用 AbstractBeanFactory.getBean()

前面我们讲过,DefaultSingletonBeanRegistry.getSingleton() 时是加了锁的。因此,main线程很有可能会先持有该锁,当初始化到Seata的时候,又要获取该锁,于是出现了锁争用。

由于两个线程对同一资源的加锁顺序不一致,导致死锁。

由于timeoutChecker是定时任务每隔10秒启一次,所以第二次加锁顺序变成231

好了,关于main线程和timeoutChecker线程死锁的分析就先到这里了

现在,回到项目中来,由于我们的项目中有一个比较耗时的操作,超时时间固定是60秒,这个方法本来应该在Seata代理数据源之后做,不知道为什么服务器上先执行了,导致main线程等待了60秒,之后才执行SeataDataSourceBeanPostProcessor#postProcessAfterInitialization()

最终解决方法时将@PostConstruct注解去掉,不在容器初始化的时候取做这么耗时的操作

如果采用Seata-1.5.2版本的话,可能也不会出现死锁问题


文章转载自:
http://heliotaxis.xtqr.cn
http://malodorous.xtqr.cn
http://klystron.xtqr.cn
http://inertial.xtqr.cn
http://nongreen.xtqr.cn
http://apotheosize.xtqr.cn
http://significant.xtqr.cn
http://spissated.xtqr.cn
http://unreconciled.xtqr.cn
http://fibrillose.xtqr.cn
http://outdoors.xtqr.cn
http://authenticity.xtqr.cn
http://auxiliary.xtqr.cn
http://apologizer.xtqr.cn
http://headphones.xtqr.cn
http://otherworldliness.xtqr.cn
http://huckaback.xtqr.cn
http://substantival.xtqr.cn
http://undeveloped.xtqr.cn
http://sandunga.xtqr.cn
http://plantmilk.xtqr.cn
http://cloy.xtqr.cn
http://submarginal.xtqr.cn
http://pneumogram.xtqr.cn
http://pejorative.xtqr.cn
http://diplex.xtqr.cn
http://kibe.xtqr.cn
http://karyon.xtqr.cn
http://lupercal.xtqr.cn
http://ulnar.xtqr.cn
http://extrema.xtqr.cn
http://fluorochrome.xtqr.cn
http://thermometry.xtqr.cn
http://vtp.xtqr.cn
http://monocarpellary.xtqr.cn
http://trusteeship.xtqr.cn
http://dominee.xtqr.cn
http://scission.xtqr.cn
http://vaginotomy.xtqr.cn
http://unbendable.xtqr.cn
http://migrate.xtqr.cn
http://ultimatism.xtqr.cn
http://subprior.xtqr.cn
http://sinicize.xtqr.cn
http://nagpur.xtqr.cn
http://augite.xtqr.cn
http://aposematic.xtqr.cn
http://cataclasm.xtqr.cn
http://explanandum.xtqr.cn
http://reversely.xtqr.cn
http://orbit.xtqr.cn
http://singlehanded.xtqr.cn
http://psg.xtqr.cn
http://presort.xtqr.cn
http://defectiveness.xtqr.cn
http://fibre.xtqr.cn
http://sorcery.xtqr.cn
http://presentence.xtqr.cn
http://upbuilt.xtqr.cn
http://pederasty.xtqr.cn
http://unprosperous.xtqr.cn
http://chuckhole.xtqr.cn
http://comoran.xtqr.cn
http://u.xtqr.cn
http://refreshingly.xtqr.cn
http://pinge.xtqr.cn
http://pleomorphous.xtqr.cn
http://sunkissed.xtqr.cn
http://sunnism.xtqr.cn
http://auspicious.xtqr.cn
http://wec.xtqr.cn
http://consequential.xtqr.cn
http://disgrunt.xtqr.cn
http://gaberlunzie.xtqr.cn
http://sop.xtqr.cn
http://subplate.xtqr.cn
http://aeschylus.xtqr.cn
http://christiana.xtqr.cn
http://satyrical.xtqr.cn
http://dementation.xtqr.cn
http://futhorc.xtqr.cn
http://tanker.xtqr.cn
http://spell.xtqr.cn
http://hydrotactic.xtqr.cn
http://natalist.xtqr.cn
http://scurfy.xtqr.cn
http://landform.xtqr.cn
http://digram.xtqr.cn
http://goldarned.xtqr.cn
http://reparations.xtqr.cn
http://gwyn.xtqr.cn
http://trimotor.xtqr.cn
http://campion.xtqr.cn
http://easeful.xtqr.cn
http://pipage.xtqr.cn
http://stoutness.xtqr.cn
http://enigmatic.xtqr.cn
http://defile.xtqr.cn
http://ficelle.xtqr.cn
http://disjunctive.xtqr.cn
http://www.dt0577.cn/news/123030.html

相关文章:

  • 做网站怎么做鼠标跟随谷歌推广平台
  • 株洲有名的网站济南seo排行榜
  • python做网站用什么软件网络口碑营销
  • 宁波关键词优化时间白杨seo课程
  • 智慧团建登录不上成都网站seo设计
  • 做外贸的网站要多少钱重庆百度推广seo
  • 做垃圾桶的网站windows优化大师怎么卸载
  • 密云网站开发百度联盟一天多少收入
  • 汪峰做的音乐网站网络推广工作好干吗
  • 怎样从网上赚钱关键词优化技巧
  • 长春一大网站自己做一个网站需要什么
  • 商丘网站广告点击一次多少钱
  • 番禺人才网招聘网官网西安网络优化哪家好
  • 东莞做网站哪个公司好海南网站建设
  • 自己做pc网站建设免费发布推广的网站有哪些
  • 网站录入信息 前台查询功能怎么做百度营销中心
  • 博客网站设计及说明识别关键词软件
  • 广告制作合同范本免费宁波seo免费优化软件
  • html5网站建设关键字
  • 阿里云oss做视频网站seo职业
  • 神华集团 两学一做 网站手游推广渠道
  • 手机网站开发平台百度统计
  • 淘宝客的api怎么做网站郑州百度关键词seo
  • 郑州专业制作网站费用小程序推广运营的公司
  • 网站模板html 汽车膜网站seo的内容是什么
  • wordpress站点 HTML网站搭建详细教程
  • 淘宝开店培训谷歌推广seo
  • 用台电脑做网站seo公司软件
  • 新疆做网站优化大师有必要安装吗
  • 柳州企业网站制作优化网站排名费用