我的应用在运行在 Windows Server 2000 上。内存使用量不断增长(从 145m 开始)。
这种情况正常吗?我对 Java 还很陌生,使用的版本是 Tomcat5.5。
我的应用在运行在 Windows Server 2000 上。内存使用量不断增长(从 145m 开始)。
这种情况正常吗?我对 Java 还很陌生,使用的版本是 Tomcat5.5。
我认为Tom Hawtin的回答是最好的。它会增长直到达到最大值,然后运行GC。在服务器环境下,这是有意义的:您需要最佳性能,而不是最佳内存使用率。您预计算出总内存量,然后给每个应用程序一个最大值,这样一切都适配并且具有最佳性能。此行为可以进行调整。
使用jconsole查看实际使用情况。进行GC并观察其降至何种程度。该数字不应随时间增长,否则您就会有内存泄漏。使用visualvm来调试内存泄漏。
每次重新加载应用程序时,它都会使用额外的Perm Gen内存,而这些内存无法被回收(在Sun JVM中,其他像JRockit这样的程序没有这个问题)。在生产环境中,您不应重新加载应用程序。每次重启Tomcat即可。如果您真的想继续这样做,则可以增加最大内存并使用标志-XX:MaxPermSize = 256m增加最大Perm Gen内存。
你可能有一个内存泄漏问题。我建议先连接jconsole到你的应用程序,确定是permgen空间还是堆内存,然后继续找出泄漏的位置。你能给我们更多信息吗?随着内存增长,你的应用程序发生了什么?
如果你对诊断这种问题相对较新,我建议使用jprofiler。你可以下载完全功能的试用版本,并拍摄内存快照以查看哪些对象在内存中。你可以使用这些信息来确定哪些对象是泄漏的源头。