我不断在 PermGen 中为我的环境检测 OOM:
- 爪哇6
- jboss-4.2.3
- 不是一个大的网络应用程序
我知道 String.intern() 问题 - 但我没有足够有价值的用法。MaxPermGen 大小的增加没有影响(从 128 Mb 到 256 Mb)。
还有哪些其他原因可以为 PermGen 调用 OOM?在这种情况下,哪种调查方案最好(策略、工具等)?
谢谢你的帮助
我不断在 PermGen 中为我的环境检测 OOM:
我知道 String.intern() 问题 - 但我没有足够有价值的用法。MaxPermGen 大小的增加没有影响(从 128 Mb 到 256 Mb)。
还有哪些其他原因可以为 PermGen 调用 OOM?在这种情况下,哪种调查方案最好(策略、工具等)?
谢谢你的帮助
新的类对象被放置到 PermGen 中,因此占用了越来越多的空间。无论您将 PermGen 空间做得有多大,在足够的部署之后,它都将不可避免地达到顶峰。您需要做的是采取措施冲洗 PermGen,以便稳定其大小。有两个 JVM 标志可以处理这种清理:
-XX:+CMSPermGenSweepingEnabled
此设置包括垃圾收集运行中的 PermGen。默认情况下,PermGen 空间永远不会包含在垃圾回收中(因此会无限增长)。
-XX:+CMSClassUnloadingEnabled
此设置告诉 PermGen 垃圾收集扫描对类对象采取操作。默认情况下,类对象获得豁免,即使在垃圾回收期间访问 PermGen 空间也是如此。
在类加载器泄漏时重新部署应用程序时,您通常会遇到此错误,因为这意味着您的所有类都被再次加载,而旧版本仍然存在。
有两种解决方案: