Memory leaks Spring应用程序上下文占用了大量的内存

Memory leaks Spring应用程序上下文占用了大量的内存,memory-leaks,memory-management,spring,profiler,tomcat5.5,Memory Leaks,Memory Management,Spring,Profiler,Tomcat5.5,我有许多在Tomcat5.5服务器上运行的基于Spring框架的应用程序。其中一些有自己的实例,一些与其他应用程序共享服务器。他们都有一个共同点,那就是他们需要大量的内存,比我认为他们真正需要的要多。有什么工具可以用来分析Tomcat服务器吗 更详细地说,它们运行在Ubuntu9.04上,经过完全修补,可以访问3 GB内存(实际上占用了大约一半的内存)。 Tomcat本身也通过网络公开了很多信息 这就是说,1.5GB的应用程序可能并没有那么怪异。当然,这取决于应用程序-如果是“Hello Wor

我有许多在Tomcat5.5服务器上运行的基于Spring框架的应用程序。其中一些有自己的实例,一些与其他应用程序共享服务器。他们都有一个共同点,那就是他们需要大量的内存,比我认为他们真正需要的要多。有什么工具可以用来分析Tomcat服务器吗


更详细地说,它们运行在Ubuntu9.04上,经过完全修补,可以访问3 GB内存(实际上占用了大约一半的内存)。 Tomcat本身也通过网络公开了很多信息


这就是说,1.5GB的应用程序可能并没有那么怪异。当然,这取决于应用程序-如果是“Hello World”,那么您会遇到问题:-)

有很多Java评测工具:

  • (免费)
  • (商业)
  • (商业)
您只需要在启动时将探查器连接到JVM

您也可以查看Lamba probe,但它更多用于监控:

另请看:


更详细地说,它们运行在Ubuntu9.04上,完全修补,可以访问3 GB内存(实际占用了大约一半)。在实际问题中添加了您的评论;)讨论中的主要应用程序分布在6个applicationContext-.xml文件中,总共约有110个bean,其中85%是单实例。那些不是的是通过UI动态选择的特殊模板化模型对象原型。应该占用空间的最大对象是Hibernate SessionFactory和Hibernate Validators,其余的都是相当薄的对象。我主要关心的一个问题是,应用程序需要3分钟才能开始生产,当我们对系统进行维护时,我们真的在系统崩溃的每一分钟都会赔钱。Tomcat需要很长时间来启动和分配所有内存。有什么方法可以让应用程序在启动时抓取一大块吗?我强烈怀疑3分钟的启动时间是由内存分配引起的;这很可能是由DB pool+SessionFactory(特别是在具有大量映射的大型模式上)+启动期间初始化的任何其他资源和/或计算密集型项引起的。Spring和Tomcat也增加了一些开销,但与其他组件相比应该是相当小的。也就是说,你真的需要对此进行分析,而不是猜测。一旦你知道什么需要花费最多的时间/最多的记忆,就应该更容易找出原因。非常感谢你的回复,非常感谢。