【问题标题】:Java : Full GC (Permanent Generation Full) happening randomlyJava : Full GC (Permanent Generation Full) 随机发生
【发布时间】:2015-05-23 20:37:00
【问题描述】:

我为我的 java 应用程序配置了以下参数 -Xmx = 46g, -Xms = 46g, NewSize = 2g。

我们没有为 permgen 配置大小,但在 JCONSOLE 中它显示最大 perm gen 大小为 83mb。

在运行稳定性测试时,我们可以看到我在 GC 日志中随机得到以下信息。

[Full GC (Permanent Generation Full)489.822: [CMS: 11384171K->4403070K(46137344K), 10.9407280 秒] 11572765K->4403070K(48024832K), [CMS Perm : 37142K->37062K(37376K)], 10.9413340 secs] [Times: user=10.80 sys=0.13, real=10.94 secs]

我找不到此 GC 调用的原因,因为有可用空间用于永久生成(因为 83 mb 显示为最大值,提交的永久生成内存显示为 appx 37MB)。

你能分享一下你的想法吗?

谢谢 JK

【问题讨论】:

    标签: java garbage-collection permgen


    【解决方案1】:

    即使您的 max PermGen 可能是 83 MB,JVM 在上面的日志中也只分配了 36.5 MB。假设 JVM 执行完整的 GC 并尝试继续释放任何内容,然后从操作系统请求更多内存以扩展其 PermGen 空间(最大为 83 MB),这似乎是公平的。

    您可以尝试使用-XX:PermSize 设置初始永久代大小。

    【讨论】:

    • 您好,感谢您的回答。如果使用的 permgen 大小达到了提交的 perm gen 大小,那么 JVM 会执行完整的 gc 吗?我认为 JVM 会自动增加提交的 perm gen 大小而无需执行完整的 gc(因为已经有足够的空间可用,高达 83 mb)。
    • @JK_007 JVM 确实(不幸的是)需要一个完整的 GC 来增长 perm gen。
    • 谢谢。。按照建议,我将使用选项 -XX:PermSize 和 -XX:MaxPermSize 并将其设置为 83MB。
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多