gpt4 book ai didi

Java HotSpot 1.6 VM,垃圾收集——可怕的 PermGen

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

我的应用程序显示“Old Generation”/“Tenured Generation”大小不断增加,当这达到“Old Gen”的最大限制时,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)

最佳答案

我会听从 leonm 的建议来分析是什么占用了这么多内存。我敢打赌你有某种严重的内存泄漏。

你说你不做任何花哨的类加载,但 Hibernate 会为你动态生成一些类。您是否使用了一些 AOP 功能(例如来自 Spring AOP 模块?)。

基本上,如果您的 PermGen 空间用完了,那么您的应用程序似乎会继续生成新类(因为它是存储在 PermGen 中的类)。

关于Java HotSpot 1.6 VM,垃圾收集——可怕的 PermGen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809715/

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