1

我们的上下文初始化从 60 秒跳到了大约 15 分钟。在慢速和快速情况下,它最终都会成功启动。无论哪种方式都没有致命错误。是否有特定的日志记录设置甚至建议的类来设置断点(或添加断点日志记录)?

我已经找到了该行为开始的修订版,但尚不清楚是什么导致它花费了这么长时间。我在 DefaultListableBeanFactory 中设置了断点。这是一个大型应用程序,因此在获取和创建 bean 时调用堆栈有时有数百个深度,但将其与先前的修订版(快速完成)进行比较显示出相似的性质。在慢速修订和快速修订之间,没有任何异常之处。

我已经通过“慢速部分”在随机点暂停了执行,堆栈跟踪看起来很合理,根据需要实例化新的 bean,在可能的情况下设置属性(这可能会导致更多的递归 doCreateBean 调用等)。

我还没有费心设置分析器,但怀疑它是否有用。慢版本花费所有时间的代码(bean factory,context init)当然也是快版本花费最多时间的代码。

4

1 回答 1

0

您可能想要检查详细的 GC 日志。可能是它以某种方式创建了很多对象,您会看到 1)堆不断增长,表示“额外”bean 或 2)很多 Nursery GC 表示创建了很多对象,但没有太多停留(通过添加根据上下文)。

对于 #1,Eclipse MAT之类的工具将帮助您分析占用最多内存的对象的堆转储。

对于#2,分析器仍然会有所帮助。查看拨打的电话数量,而不是花费的时间。您可能希望找到被大量调用的构造函数或其他创建/初始化方法。从那里您可以追溯找到有问题的 bean。

于 2012-07-27T01:18:30.363 回答