gpt4 book ai didi

java - Glassfish/Hibernate 的 PermGen 空间问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:51 25 4
gpt4 key购买 nike

我在 Glassfish 3.1 上运行 GWT+Hibernate 应用程序。几个小时后,我的 Permgen 空间用完了。这没有任何 webapp 重新加载。我正在使用 –XX:MaxPermSize=256m –XmX1024m 运行。

我听取了 this page 的建议,并发现我正在泄漏大量类——我所有的 Hibernate 模型和我所有的 GWT RequestFactory 代理。

上面引用的指南说“检查链,找到意外引用,并修复代码”。说起来容易做起来难。

类加载器总是指向 org.glassfish.web.loader.WebappClassLoader 的实例。进一步挖掘,我发现了很多来自 $Proxy135 和类似名称对象的引用。但我不知道还有什么办法可以跟进。

最佳答案

新的类对象被放置到 PermGen 中,因此占用的空间量不断增加。无论您将 PermGen 空间设置得有多大,在足够的部署之后它都不可避免地会达到顶峰。您需要做的是采取措施刷新 PermGen,以便您可以稳定其大小。有两个 JVM 标志可以处理这种清理:

-XX:+CMSPermGenSweepingEnabled

此设置包括垃圾收集运行中的 PermGen。默认情况下,PermGen 空间从不包含在垃圾回收中(因此无限增长)。

-XX:+CMSClassUnloadingEnabled

这个设置告诉 PermGen 垃圾收集扫描对类对象采取行动。默认情况下,类对象获得豁免,即使在垃圾回收期间访问 PermGen 空间也是如此。

关于java - Glassfish/Hibernate 的 PermGen 空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5509378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com