慢弹簧上下文初始化

时间:2012-07-26 23:36:23

标签: spring

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

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

我通过“慢速部分”暂停了随机点的执行,并且堆栈跟踪显得合理,根据需要实例化新bean,尽可能设置属性(这可能导致更多递归的doCreateBean调用等等)。

我还没有打扰设置一个分析器,但怀疑它会有用。慢速修订版在(bean工厂,上下文init)中花费的代码当然与快速修订版花费大部分时间的代码相同。

1 个答案:

答案 0 :(得分:0)

您可能想要检查详细的GC日志。可能是它以某种方式创建了很多对象,你会看到1)堆不断增长,表明'额外'的bean或2)很多托儿所GC表明很多对象创建但不是很多(通过添加)上下文)。

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

对于#2,分析器仍然有帮助。查看所做的通话次数,而不是花费的时间。您可能希望找到被称为大量次数的构造函数或其他create / init方法。从那里你可以追溯到找到有问题的豆。