为什么我的tomcat应用程序的内存使用量不断增长?

use*_*461 11 java tomcat memory-leaks memory-management

我的应用程序在Windows Server 2000上运行.内存使用量不断增长(从145米).

这是正常的吗?我是Java新手.版本是Tomcat5.5.

Ale*_*ler 9

如果它只是增长,那就是内存泄漏.但如果它增长到你的最大堆,然后下降,那么这是正常的垃圾收集行为.您可以使用许多工具来了解更多信息.最简单的方法之一是连接JConsole(JDK的一部分)并随着时间的推移观察堆.

您还可以查看垃圾收集信息,其中包含各种开关和参数,例如-verbose:gc.

如果您想诊断内存泄漏,可以使用许多优秀的工具,包括几个可以与Eclipse,NetBeans,IntelliJ等一起使用的免费工具.


Tom*_*ine 6

Sun"server"HotSpot的默认行为是放大堆而不是清除SoftReferences(用于缓存).默认设置是为每兆字节可用的最大堆大小保留一秒钟.因此,期望堆增长到最大大小.如果实际上内存OutOfMemoryException不足或性能变差(由于过多的GC或小缓存),那么您需要查找内存泄漏.

Tomcat服务器在重新加载应用程序后也经常遭受内存泄漏.例如,Tomcat在所有应用程序之间共享线程,这通常会导致Sun的ThreadLocal实现不正确地保留值.


GEO*_*HET 1

这是不正常的,可能表明存在内存泄漏

您应该尝试使用内存分析器来查看应用程序的泄漏位置。

一般来说,您应该寻找创建对象但未正确处理对象的循环或重复操作。