每次部署都会增加已加载类的数量

时间:2013-05-25 19:37:35

标签: java out-of-memory websphere-7

我在websphere 7中部署的应用程序中遇到了outOfmemory问题。

我正在使用yourKit尝试解决正在发生的事情,我可以看到的一件有趣的事情是,当我第一次启动应用程序时,它会加载大约20k类,并且每次我进行另一次部署(没有重新启动websphere)这个数字增加了2k,堆大小跟随这个增加。

我猜这是根本问题,但我不知道如何解释为什么会这样。

我试图在一次部署之前列出所有类,然后一个接一个地列出所有类,但是由于我无法列出所有20k类(只有10k不知道为什么),所以这并没有很好地工作。当我比较两个列表时,我发现了大约600个新类,这些类确实来自我的应用程序或我的应用程序的依赖项。

我发现我的大多数应用程序类都是枚举和DAO类的实现。

我的应用程序是使用Struts和Spring框架的Java EE 6应用程序。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当JVM的堆空间或permGen空间已满时,可能会导致

OutOfMemoryError

如果您遇到的问题是由应用程序的重新部署引起的,那么您可能会遇到PermGen OOME。当应用程序服务器无法从其内存中完全卸载类的定义(内存泄漏)时会发生这些情况。

这种情况很常见(至少根据我的经验),通常开发人员只需增加应用程序服务器的PermGen大小,或者只是退回应用程序服务器以清理PermGen。

答案 1 :(得分:0)

这是典型的类加载器泄漏。这可能是由您的应用程序或运行时中的错误(即WebSphere或JRE)引起的。请注意,WAS 7中有很多,特别是在较旧的修订包中。

您可能需要查阅以下文档以更深入地了解该问题:

https://code.google.com/p/arit/wiki/GettingStarted