“目前加载的课程:”不断增加,PermGen弹跳最大?

在过去的几天里,我已经对我的web应用程序运行了负载,我注意到通过JMX监视查看的“当前加载的类”正在不断增加。 它会上升然后回落,但是加载的类的平均数量随时间线性增加。 负荷开始时,“stream动课”只有几千人。 然而,现在“已加载课程”已经达到了13万多个。

这是正常的吗? 我知道类将会填满PermGen的内存,但是不pipePermGen的内存是否泄漏都不是确定性的。

Used:     65,124 kbytes Committed:     65,536 kbytes Max:     65,536 kbytes 

使用的数字在62k和65k之间移动,但是我还没有注意到服务器上的任何灾难性故障。 那么我的问题是双重的。

首先,这是正常的吗? 如果不是,这最终会导致Tomcat崩溃吗?

恐怕你的问题没有明确的答案。 在permgen中最多的空间应该被你的应用程序的类占用。 有可能你的应用程序正在运行时生成类。 那么你的应用程序描述的行为就像预期的那样。 当你的应用程序不能即时产生类时,加载的类的数量和permgen的数量应该或多或less是静态的。

当你的应用程序正在创build很多类时,你可能会遇到内存问题。 您将在tomcat日志中看到java.lang.OutOfMemoryError: PermGen space消息。 您可以通过使用此参数显式设置perm gen来testing: -XX:MaxPermSize=

你也可以试试这个参数: -XX:+CMSClassUnloadingEnabled与cms垃圾收集器。 当加载的类的数量没有下降时,仍然有从这些类的对象引用。 这可能是一个标志,你真的有内存泄漏。 但是你一定要知道正在运行的应用程序。 当这是应用程序的期望的行为时,您只能增加perm gen的空间。 烫发的大小是堆的大小。

这里是一个在stackoverflow上的post,它提出了一个方法来明确什么是permgen的内容。