【问题标题】:PermGen out of space before Max is reached在达到 Max 之前 PermGen 空间不足
【发布时间】:2013-09-05 09:35:59
【问题描述】:

我使用 JPA/Hibernate 在 Tomcat 上运行 Java Web 应用程序,并且经常出现“PermGen out of space”。

谁能解释一下这个图形内存配置文件?

堆内存:我正在运行到最大值,但仍有一些空间(2.147.483.648 Max,但使用了 1.667.155.688)

非堆内存:大小正在下降 (94.568.448),而最大值允许增加 5 倍。这是“PermGen 空间不足”之前的快照(当 Size = Used 时)

我不明白这个配置文件。还剩下很多物理内存。

【问题讨论】:

    标签: java tomcat memory profile permgen


    【解决方案1】:

    这是 Tomcat 经典问题之一。最好的答案之一在这里:

    https://stackoverflow.com/a/10392385/1314276

    【讨论】:

    • 由于我在 Hibernate 中使用 JPA,因此创建了很多类,这些类将数据放在非堆空间中。
    【解决方案2】:

    Perm gen 空间不与 Heap 相交。您应该使用 -XX:PermSize 和 -XX:MaxPermSize 参数。

    【讨论】:

    • 这些参数正在使用中,但从未达到 MaxPermSize。保留的大小正在下降,以达到使用的大小,然后应用程序失败。
    【解决方案3】:

    这个问题通常与一些内存泄漏有关。 PermGen 或永久代是堆的一部分,例如String 对象和Class 定义被分配。当堆和/或物理内存上仍有空间时,您很容易用完 PermGen。

    您可以增加 perm gen 的大小,但在大多数情况下,它只会延长问题,因为您只会花一些时间。

    我们需要查看导致此错误的代码,因为我们无法根据某些图表为您提供帮助。如果您不了解内存管理在 java 中的工作原理,这些链接可能会对您有所帮助:Jvm performance enhancements, Java garbage collector

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2013-03-14
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多