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

快照

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

有帮助吗?

解决方案

有一个很好的解释为什么会发生这种事情,以及更多最近有类似问题的说法此处

使用 jhat 可能有助于找出占用内存的类,然后查找可能存在它们/或类加载器的静态引用,从而阻止正确卸载。

其他提示

看起来你没有重新加载你的应用程序,这将是明显的答案。你真的想知道这些课程是什么。

Reflection和XSLT [C]是创建类的明显目标,但这看起来非常规律。据推测,在某个地方有一些基于时间的缓存以某种方式泄漏。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top