我正在努力改善战争的启动性能,因为我们基本上是托管基于服务的后端,我们有大约50场以上的战争(每项服务一次)。一次部署所有这些服务有时会导致PermGen,并且重启服务器可能需要一段时间。所以我试图评估架构的所有可能性(WLS,Spring,Hibernate,CXF)以获得性能提升。
我们所有交易都是通过Spring AOP完成的,我们的一些SLA /政策使用AOP切入点。
我已经看到一些情况,我们的Spring AOP切入点创建得很差,或者我们不得不使用很多会导致JUnits到PermGen的情况。看起来大部分启动时间都是创建切入点和切入点对象的检索(所以我将一些自定义的Pointcut / Interceptor类合并到一个类和单个Pointcut中,这减少了启动时创建的切入点的数量大约30%)。
为了从编译时间编织中获得一些好处,是否值得将所有这些转换为AspectJ(我之前没有使用过)?这会为启动性能和内存使用提供更好的速度吗?
我看了帖子:
我绝对看起来纯粹是从减轻启动和内存需求的方式来看,并且只想尝试迁移,如果它值得付出努力。
答案 0 :(得分:0)
我一直在努力解决同样的问题并且没有得到一个好的答案,但这是我到目前为止所尝试的,它可能会为你节省一些时间。
我正在使用LTW与AspectJ 1.7.1,它增加了我的启动时间约3秒,我使用它与tomcat与自定义类加载器,我配置为只扫描我的代码没有其他包。在我的启动时间剩下的时间里,我似乎正在分析我的基于注释的自动装配的代码库。
08:11:27,878 INFO [DefaultContextLoadTimeWeaver] Using a reflective load-time weaver for class loader: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader
08:11:30,326 INFO -- the last info printed from the LTW infrastructure
我有一台带有SSD的快速机器,如果你的机器不是那么快,这可能需要更长的时间。
新的AspectJ 1.7作为LTW的追逐模式加速了它,请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=367673我没有使用它,所以我不知道它有多好用。
最快的选择是将项目转换为AspectJ项目,然后由于aspectJ而没有启动开销,因为我们正在进行编译时编织。我没有使用这个选项,因为我没有费心将aspectJ集成到我的构建系统中,而且我不想让编写方面太容易:)