我们在测试环境中有Tomcat 7(0.0.47),我决定从中获取堆转储以查看我们的内存是否一切正常。
它包含三个应用程序 - 一个是jersey + spring rest web应用程序,另一个是Web应用程序,几乎没有传入的http请求,但石英具有繁重的业务逻辑,第三个是轻量级Web应用程序,支持一些jmx点可以使用一些课程。
在visualvm中,我看到一些让我害怕的价值观。我想知道它是好还是出了什么问题?
针对泽西休息应用的WebappClassLoader已保留尺寸25 364 571, 而其他两个应用程序的类加载器明显更小 - 约5KK和8KK。可以吗?
摘要标签显示我有337类加载器和3376 GC根? 那太多了吗?和总例数:1 573 037
我也尝试过了一段时间后转储没有:live选项(之后 半小时)我在摘要中看到我的数量几乎相同 类加载器(346)和GC根(3329)。但是"生活和死亡的大小"转储的大小远大于#34;生活" dump - 926Mb vs 390Mb。可以,还是我有一些内存泄漏?
我查看了大型类加载器转储,我发现其中最大的保留大小有HashMap resourceEntries。这个hashmap代表什么?我应该查看未使用的外部库并将其排除以减小此大小,还是可以吗?
对于某些愚蠢的问题感到抱歉,我在内存优化方面有点新手
答案 0 :(得分:0)
您的生产应用程序是否因PermGen或Heap的OutOfMemoryException而失败?如果没有,您的服务器已经用于> 1周,然后不,你很可能没有问题。
编辑:如下所述,某些GC调整可能是有序的:
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled"
JAVA_OPTS="$JAVA_OPTS -XX:+AggressiveOpts -XX:+UseFastAccessorMethods"