Spring应用启动hang住了,如何快速确定是哪个线程导致hang的呢?

发布于 2022-09-11 17:13:21 字数 564 浏览 26 评论 0

请教个问题:如果你刚接手了一个陌生Spring应用,应用在启动的过程中hang住了,Spring容器并没有启动完成也没有失败就一直hang在那里。业务日志中并没有明显的错误日志(可以确定是外部依赖导致的),更多是一些中间件系统的正常日志,那要如何定位是什么导致启动失败呢?

我的尝试:1.通过日志企图找到蛛丝马迹(搜寻了基本日志没有发现明显错误) 2.多次thread dump企图看是否有明显死锁、阻塞线程问题(失败) 3、继续thread dump企图找到导致hang的原因
我的经验:长时间hang可能是需要下载某些东西,但一直下载不下来(可能是网络、内存等原因);外部依赖没有超时熔断而是一直在重试。。。。

我的疑问:在第三个尝试中,由于在一个复杂的系统中会依赖各种各样的中间件等外部系统,spring容器已经加载了一部分的bean,这样thread dump中会有各种各样的线程处于不同的状态,那一个新系统如何快速确定是哪个线程导致hang的呢?当然经验很足或者对系统很熟悉可能更快。

当然很多人的答案都是具体情况具体分析,但你哪些经验可以分享呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三五鸿雁 2022-09-18 17:13:21

1、jps
2、jstack pid

看看线程都在干什么

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文