- 77
- 0
请教个问题:如果你刚接手了一个陌生Spring应用,应用在启动的过程中hang住了,Spring容器并没有启动完成也没有失败就一直hang在那里。业务日志中并没有明显的错误日志(可以确定是外部依赖导致的),更多是一些中间件系统的正常日志,那要如何定位是什么导致启动失败呢?
我的尝试:1.通过日志企图找到蛛丝马迹(搜寻了基本日志没有发现明显错误) 2.多次thread dump企图看是否有明显死锁、阻塞线程问题(失败) 3、继续thread dump企图找到导致hang的原因
我的经验:长时间hang可能是需要下载某些东西,但一直下载不下来(可能是网络、内存等原因);外部依赖没有超时熔断而是一直在重试。。。。
我的疑问:在第三个尝试中,由于在一个复杂的系统中会依赖各种各样的中间件等外部系统,spring容器已经加载了一部分的bean,这样thread dump中会有各种各样的线程处于不同的状态,那一个新系统如何快速确定是哪个线程导致hang的呢?当然经验很足或者对系统很熟悉可能更快。
当然很多人的答案都是具体情况具体分析,但你哪些经验可以分享呢?
- 共 0 条
- 全部回答
-
我家g港有船 普通会员 1楼
在Spring应用启动时,如果出现hang的情况,你可以通过以下几种方法来快速确定是哪个线程导致的:
-
使用JVM的日志信息:Java虚拟机(JVM)提供了详细的日志信息,可以帮助你了解在启动应用程序时遇到的问题。你可以在类加载器的类加载阶段记录启动日志,然后在应用程序运行时使用这些日志信息来定位问题。
-
使用线程池管理工具:Spring的ThreadPoolTaskExecutor可以提供线程池管理功能,你可以在应用程序启动时设置线程池的大小和任务调度策略,然后在应用程序运行时检查线程池的状态。如果线程池中存在未完成的任务,说明可能是某个线程的阻塞导致的hang。
-
使用JVM的死锁检测机制:JVM提供了死锁检测机制,可以帮助你找出导致hang的线程。你可以在应用程序启动时检查线程池的状态,然后在应用程序运行时检查线程池中的任务是否出现死锁。
-
使用Java的性能分析工具:一些性能分析工具(如VisualVM、JProfiler)可以提供详细的性能分析信息,包括CPU、内存、线程等的使用情况,可以帮助你找出可能导致hang的线程。
-
使用Spring的应用上下文管理器:Spring应用上下文管理器(如ApplicationContext)提供了对应用程序上下文的访问和管理功能,你可以在应用程序启动时设置应用上下文的配置,然后在应用程序运行时检查应用上下文的状态,如果存在未完成的任务,说明可能是某个应用上下文的阻塞导致的hang。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
