我在Glassfish服务器上使用EJB3和JSF的企业应用程序。运行此应用程序超过2周后,我意识到我有类加载问题。我不认为这是permgen的问题。每次打开页面时都会加载类,但之后它们永远不会从内存中删除。这是我服务器内存的快照:
所以,我只需要一些关于如何调试这个问题的指示。
答案 0 :(得分:2)
有nice explanation这种事情发生的原因,以及最近类似问题here的说明。
使用jhat可能有助于找出占用内存的类,然后查找可能包含它们/或类加载器的静态引用,从而阻止正确卸载。
答案 1 :(得分:0)
看起来你没有重新加载你的应用程序,这将是明显的答案。你真的想知道这些课程是什么。
Reflection和XSLT [C]是创建类的明显目标,但这看起来非常规律。据推测,在某个地方有一些基于时间的缓存以某种方式泄漏。
答案 2 :(得分:0)
如果你正在使用它,这可能是你的JSF Web框架(MyFaces,ICEFaces等)的问题。特别是考虑到您没有重新部署应用程序,但是在打开/关闭页面时会发生这种情况。我建议您在进行更多调试和分析之前检查相应的问题跟踪器。
此外,您可以尝试在本地计算机上部署应用程序,故意占用较少的堆空间,并尝试仅通过浏览应用程序的Web页面来重现内存泄漏。希望你能够准确地意识到什么样的动作会导致新类被加载。