【发布时间】:2011-01-14 12:06:23
【问题描述】:
我们使用带有@AspectJ 样式注释和<aop:aspectj-autoproxy/>
的Spring (3.0.5) AOP。我们将它用于事务、审计、分析等。它工作正常,只是应用程序的启动时间随着更多代码的添加而不断增长。
我做了一些分析,发现大部分时间都花在了 Spring 容器初始化期间,更具体地说是org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(String, ObjectFactory) - 大约需要 35 秒。
org.springframework.aop.support.AopUtils.canApply(Pointcut, Class, boolean) - 大约需要 15 秒。
我的目标是让应用程序在 5-10 秒内启动,而不是像现在这样约 45 秒,所以任何提示都将不胜感激。
【问题讨论】:
-
匆忙下结论 Spring AOP 导致启动性能问题。(考虑到编织发生在运行时)。您是否使用 Jconsole 或 visualVm 检查了 JVM 的统计信息。您是否有一些 bean 的自定义 init 方法。您是否尝试过使用延迟初始化。 (通过 bean 中的惰性初始化属性)?
-
这些是我将遵循的步骤。 1- 正常加载时检查 JVM 统计信息。 2. 将 beans 的 lazy-init 属性设为默认值,然后再次检查 jvm stat(内存使用情况等)。 3-如果仍然没有显着改善,我将关闭自动代理方面。就像我提到的,如果我必须下注,我会准备打赌它不会影响加载时间。
-
我很确定这是编织,因为我花了很多时间对 Yourkit 进行分析,在启动期间只进行线程转储并放置一些断点和所有指向 AOP 编织的点。但是当您说关闭方面自动代理时,我很好奇您建议的替代方案是什么?谢谢,尤瓦尔
-
你有解决这个问题的办法吗?我也面临同样的问题。
-
不,没有解决方案,我们只能忍受它......
标签: java performance spring aop spring-aop