0

我正在开发一个部署在 Weblogic 中的 webapp。经过几次重新部署后,PermGen 空间不足,所以我不得不得出结论,webapp 有一个类加载器泄漏......

我正在使用 Yourkit 调查该泄漏,但发现自己陷入困境,因为我什至不知道哪个类加载器正在泄漏:当我进行内存转储并打开它时,Yourkit 向我显示了数十个(更准确地说:289)类加载器实例. 从名字我可以猜到其中一些不是那些,但这仍然留下了很多可能性。

我尝试在使用应用程序之前/之后比较类加载器列表(这是一种有效的方法吗?),但这没有帮助,因为大多数类加载器都是相同类的实例,所以我不知道哪个实例是我感兴趣的那个。

Yourkit 报告的类加载器类是:

  1. sun.misc.Launcher$AppClassLoader
  2. weblogic.utils.classloaders.GenericClassLoader
  3. weblogic.utils.classloaders.ChangeAwareClassLoader
  4. java.net.URLClassLoader sun.misc.Launcher$ExtClassLoader
  5. weblogic.servlet.jsp.JspClassLoader
  6. weblogic.diagnostics.query.QueryCompiler
  7. sun.reflect.DelegatingClassLoader
  8. javax.management.remote.rmi.NoCallStackClassLoader

如果您已经知道 Weblogic 使用其中的哪一个来加载 webapp 的类,那将会有所帮助,因为我在 Weblogic 文档中没有找到它。任何人都可以提出一种方法来找到特定的类加载器实例吗?

4

1 回答 1

0

我最后求助于查看和的每个实例的加载类列表GenericClassLoaderChangeAwareClassLoader因为它们似乎是最有可能的)并检查它们是否有我自己的类(过滤包​​)。webapp 类加载器是ChangeAwareClassLoader.

于 2014-03-27T10:31:39.400 回答