Tomcat 7 - 我的堆转储漏洞了吗?

时间:2014-05-15 09:03:03

标签: java tomcat memory-leaks heap

我们在测试环境中有Tomcat 7(0.0.47),我决定从中获取堆转储以查看我们的内存是否一切正常。

它包含三个应用程序 - 一个是jersey + spring rest web应用程序,另一个是Web应用程序,几乎没有传入的http请求,但石英具有繁重的业务逻辑,第三个是轻量级Web应用程序,支持一些jmx点可以使用一些课程。

在visualvm中,我看到一些让我害怕的价值观。我想知道它是好还是出了什么问题?

  1. 针对泽西休息应用的WebappClassLoader已保留尺寸25 364 571, 而其他两个应用程序的类加载器明显更小 - 约5KK和8KK。可以吗?

  2. 摘要标签显示我有337类加载器和3376 GC根? 那太多了吗?和总例数:1 573 037

  3. 我也尝试过了一段时间后转储没有:live选项(之后 半小时)我在摘要中看到我的数量几乎相同 类加载器(346)和GC根(3329)。但是"生活和死亡的大小"转储的大小远大于#34;生活" dump - 926Mb vs 390Mb。可以,还是我有一些内存泄漏?

  4. 我查看了大型类加载器转储,我发现其中最大的保留大小有HashMap resourceEntries。这个hashmap代表什么?我应该查看未使用的外部库并将其排除以减小此大小,还是可以吗?

  5. 对于某些愚蠢的问题感到抱歉,我在内存优化方面有点新手

1 个答案:

答案 0 :(得分:0)

  1. 您为服务器分配了多少内存?
  2. 你的GC标志是什么?
  3. 您的生产应用程序是否因PermGen或Heap的OutOfMemoryException而失败?如果没有,您的服务器已经用于> 1周,然后不,你很可能没有问题。

    编辑:如下所述,某些GC调整可能是有序的:

    JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled"
    JAVA_OPTS="$JAVA_OPTS -XX:+AggressiveOpts -XX:+UseFastAccessorMethods"