初始化 Spring 应用程序时如何确定哪个方法花费了这么长时间

Posted

技术标签:

【中文标题】初始化 Spring 应用程序时如何确定哪个方法花费了这么长时间【英文标题】:How to determine which method is taking so long when initializing a Spring application 【发布时间】:2019-11-13 09:59:46 【问题描述】:

我熟悉标准调试实践,但这些实践在这种情况下不起作用,因为我无法手动一步一步地跟随 Spring 应用程序。当服务被初始化时会发生许多过程,例如访问数据库、bean 初始化等。是否有一个分析工具可以捕捉一个方法需要多少时间以及导致应用程序停止的问题到底在哪里长时间做某事?如果有帮助的话,我可以使用任何 IntelliJ Idea Ultimate 工具。有什么建议吗?

【问题讨论】:

【参考方案1】:

我个人使用JProfiler 有一段时间来测试我编写的应用程序在渲染过程中减速的地方。它允许您查看运行方法所需的时间、调用它们的频率以及在这种情况下可能对您真正有用的大量其他信息!

【讨论】:

【参考方案2】:

打开调试级别日志记录,以便您可以遵循 Spring 初始化过程,例如执行以下操作之一:

java 命令中添加 JVM 选项:

-Dlogging.level.org.springframework.beans.factory.support.DefaultListableBeanFactory=DEBUG

mvn命令中添加JVM选项:

-Dspring-boot.run.arguments=--logging.level.org.springframework.beans.factory.support.DefaultListableBeanFactory=DEBUG

将选项添加到application.properties 文件:

logging.level.org.springframework.beans.factory.support.DefaultListableBeanFactory = DEBUG

将选项添加到application.yml 文件:

logging.level.org.springframework.beans.factory.support.DefaultListableBeanFactory: DEBUG

我会推荐最后两个中的一个,只要记住在完成后删除或注释掉该选项即可。

【讨论】:

谢谢,我试试那个。如果问题出在 Spring init 中,那将有所帮助。否则我将不得不遵循更通用的方法 @Galya 你的问题确实说“初始化Spring应用程序时”,所以问题在Spring init中。此提供的额外日志记录将记录每个正在创建的 bean 以及时间戳,因此如果日志显示在创建特定 bean 时出现延迟,那么该 bean 将是您的问题。

以上是关于初始化 Spring 应用程序时如何确定哪个方法花费了这么长时间的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 Icarousel 停止在哪个视图上?

如何确定当前应用在 LibGDX 中运行在哪个平台上?

如何确定从iOS后台返回前台时加载哪个视图?

使用 System.nanoTime() 时如何确定哪个执行时间更有信誉[重复]

如何确定函数来自哪个头文件?

调用 AUEffectBase::Render 时如何确定哪个输入总线处于活动状态?