我在 Glassfish 服务器上有带有 EJB3 和 JSF 的企业应用程序。在运行这个应用程序超过 2 周后,我意识到我的类加载有问题。我不认为这是 permgen 的问题。每次打开页面时都会加载这些类,但它们从未从内存中删除。这是我的服务器内存的快照:
所以,我只需要一些关于如何调试这个问题的指示。
我在 Glassfish 服务器上有带有 EJB3 和 JSF 的企业应用程序。在运行这个应用程序超过 2 周后,我意识到我的类加载有问题。我不认为这是 permgen 的问题。每次打开页面时都会加载这些类,但它们从未从内存中删除。这是我的服务器内存的快照:
所以,我只需要一些关于如何调试这个问题的指示。
看起来您并没有重新加载您的应用程序,这将是显而易见的答案。你真的想知道这些类是什么。
反射和 XSLT[C] 是创建类的明显目标,但这似乎非常常规。大概有一些基于时间的缓存以某种方式泄漏。
如果您使用的是 JSF Web 框架(MyFaces、ICEFaces 等),这可能是一个问题。特别是考虑到您没有重新部署应用程序,但是当页面打开/关闭时会发生这种情况。我建议您在进行更多调试和分析之前检查适当的问题跟踪器。
此外,您可以尝试将应用程序部署在本地计算机上,故意使用较低的堆空间,并尝试通过仅浏览应用程序的网页来持续重现内存泄漏。希望您能够准确地意识到什么样的动作会导致新类被加载。