我正在开发一个部署在 Weblogic 中的 webapp。经过几次重新部署后,PermGen 空间不足,所以我不得不得出结论,webapp 有一个类加载器泄漏......
我正在使用 Yourkit 调查该泄漏,但发现自己陷入困境,因为我什至不知道哪个类加载器正在泄漏:当我进行内存转储并打开它时,Yourkit 向我显示了数十个(更准确地说:289)类加载器实例. 从名字我可以猜到其中一些不是那些,但这仍然留下了很多可能性。
我尝试在使用应用程序之前/之后比较类加载器列表(这是一种有效的方法吗?),但这没有帮助,因为大多数类加载器都是相同类的实例,所以我不知道哪个实例是我感兴趣的那个。
Yourkit 报告的类加载器类是:
- sun.misc.Launcher$AppClassLoader
- weblogic.utils.classloaders.GenericClassLoader
- weblogic.utils.classloaders.ChangeAwareClassLoader
- java.net.URLClassLoader sun.misc.Launcher$ExtClassLoader
- weblogic.servlet.jsp.JspClassLoader
- weblogic.diagnostics.query.QueryCompiler
- sun.reflect.DelegatingClassLoader
- javax.management.remote.rmi.NoCallStackClassLoader
如果您已经知道 Weblogic 使用其中的哪一个来加载 webapp 的类,那将会有所帮助,因为我在 Weblogic 文档中没有找到它。任何人都可以提出一种方法来找到特定的类加载器实例吗?