如何使用Yourkit查找我的webapp的类加载器?

时间:2014-03-27 10:10:06

标签: memory-leaks weblogic classloader yourkit

我正在开发一个部署在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
  9. 如果您已经知道Weblogic已经使用了哪些加载Web应用程序的类,那么这将有所帮助,因为我没有在Weblogic文档中找到它。 任何人都可以建议一种方法来查找特定的类加载器实例吗?

1 个答案:

答案 0 :(得分:0)

我最终使用了GenericClassLoaderChangeAwareClassLoader的每个实例的加载类列表(因为它们似乎是最有可能的)并检查它们是否有我自己的类(过滤时)包)。 webapp类加载器是ChangeAwareClassLoader的实例。