0

我在 websphere 7 中部署的应用程序中遇到内存不足问题。

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

我猜这是根本问题,但我不知道如何解释为什么会发生这种情况。

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

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

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

有什么想法吗?

4

2 回答 2

1

OutOfMemoryError当 JVM 的堆空间或 permGen 空间已满时,可能会导致此问题。

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

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

于 2013-05-25T20:36:45.783 回答
0

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

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

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

于 2013-05-27T20:15:50.747 回答