3

我在 Glassfish 服务器上有带有 EJB3 和 JSF 的企业应用程序。在运行这个应用程序超过 2 周后,我意识到我的类加载有问题。我不认为这是 permgen 的问题。每次打开页面时都会加载这些类,但它们从未从内存中删除。这是我的服务器内存的快照:

快照

所以,我只需要一些关于如何调试这个问题的指示。

4

3 回答 3

2

有一个很好的解释为什么会发生这种事情,以及最近对类似问题的描述

使用jhat可能有助于找出哪些类占用了内存,然后寻找可能持有它们/或类加载器的静态引用,从而防止正确卸载。

于 2009-03-11T20:15:17.137 回答
0

看起来您并没有重新加载您的应用程序,这将是显而易见的答案。你真的想知道这些类是什么。

反射和 XSLT[C] 是创建类的明显目标,但这似乎非常常规。大概有一些基于时间的缓存以某种方式泄漏。

于 2009-03-11T20:21:56.823 回答
0

如果您使用的是 JSF Web 框架(MyFaces、ICEFaces 等),这可能是一个问题。特别是考虑到您没有重新部署应用程序,但是当页面打开/关闭时会发生这种情况。我建议您在进行更多调试和分析之前检查适当的问题跟踪器。

此外,您可以尝试将应用程序部署在本地计算机上,故意使用较低的堆空间,并尝试通过仅浏览应用程序的网页来持续重现内存泄漏。希望您能够准确地意识到什么样的动作会导致新类被加载。

于 2009-03-11T20:43:56.663 回答