解决PermGen问题的各种选项

我正在研究围绕Java 6 18 VM上的垃圾收集的各种选项,并希望获得一些指示。

我们在JBoss上运行我们的应用程序,并偶尔在重新部署过程中出现臭名昭着的PermGen错误。 互联网上有许多相互矛盾和过时的信息,说明解决或缓解这个问题的最佳方法。

从我所看到的,以下是正确的:

  • VM选项本身不能解决此问题,只能推迟它。
  • 解决此问题的唯一可靠方法是修复Application Server本身(不太可能)或运行在Application Server(更可能)中的代码(我们的代码或第三方库)中的编码错误。 Permgen的填充通常是由应用程序类加载器加载到由Application Server类加载器加载的对象的引用的结果,从而防止垃圾回收应用程序的类加载器。
  • 我有两个问题:

  • 以上是否正确?
  • 虚拟机选项CMSClassUnloadingEnabledCMSPermGenSweepingEnabled哪里进入? 从我可以看到CMSClassUnloadingEnabled取代或隐式启用CMSPermGenSweepingEnabled 。 他们中的任何一个能帮助解决上述问题?

  • 不幸的是,答案是:

  • 那些VM选项只会推迟这个问题。
  • 基本的问题是GC不会垃圾收集一个强烈可及的对象。 你需要弄清楚为什么这些旧的应用程序类加载器在重新部署后仍然可以访问并修复泄漏。

    或者,放弃生产服务器上的热重新部署,或更频繁地重新启动Web容器(例如JBoss)。


    很长,但很好的阅读:http://victor-jan.blogspot.com/2010/05/classloader-leaks-dreaded.html总之,它是可以解决的。 不容易,但可以解决。

    链接地址: http://www.djcxy.com/p/82383.html

    上一篇: The various options for solving PermGen problems

    下一篇: How does a program know where the bss segment is located