我的应用程序显示“老一代”/“老一代”的大小不断增加,当达到“老一代”的最大限制时,PermGen 的大小突然增加。这是我的一代尺寸:
-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC
这是在 32 位 Fedora 上,所以不能有比这更大的堆。
该应用程序没有进行任何花哨的类加载,尽管它使用 Spring IOC 和 Hibernate,但 Spring App-context.xml 定义了大约 1000 个 Bean。
这个应用程序从 175MB PermGen 开始,在几小时内稳步增加到 ~250MB,一直保持到 Tenured Generation 达到 ~780 MB,然后 permgen 跃升至 ~500MB,而 Old Gen 下降到 ~500MB。
这迫使我每天重新启动应用程序,并让我真正害怕即将出现的 OutOfMemory 错误。任何见解都会非常有帮助。
感谢 Gala101
5 月 13 日:有人能解释一下“老一代”被垃圾收集时会发生什么吗?
jvm 是否将'Old Gen' 中的集合放入 PermGen?
我的 PermGen 峰值仅在从“Old Gen”收集时才会出现,OldGen 大小的减小也与 PermGen 大小的增加密切相关。
PS:我不做任何实时部署/取消部署,因为那肯定会吃掉 PermGen。
以下是我的监控页面的当前截图:(已提交的部分刚刚从 ~250 MB 跃升至 500 MB)
PS Perm Gen
Type Non-heap memory
Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Peak Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Collection Usage init = 16777216(16384K) used = 252421536(246505K) committed = 504954880(493120K) max = 629145600(614400K)