我在带有 JPA/Hibernate 的 Tomcat 上运行 Java Web 应用程序,并且经常出现“PermGen 空间不足”。
任何人都可以解释这个图形内存配置文件吗?
堆内存:我正在运行到最大值,但仍有一些空间(2.147.483.648 Max,但使用了 1.667.155.688)
非堆内存:大小正在下降(94.568.448),而最大值允许增加 5 倍。这是“PermGen 空间不足”之前的快照(当 Size = Used 时)
我不明白这个简介。还剩下很多物理内存。
这是Tomcat经典问题之一。最好的答案之一在这里:
这个问题通常与一些内存泄漏有关。PermGen 或永久代是堆的一部分,例如String
对象和Class
定义在其中被分配。当您在堆和/或物理内存上仍有空间时,您很容易用完 PermGen。
您可以增加 perm gen 的大小,但在大多数情况下,它只会延长问题,因为您只会花一些时间。
我们需要查看导致此错误的代码,因为我们无法根据某些图表为您提供帮助。如果您不了解 java 中内存管理的工作原理,这些链接可能会对您有所帮助:Jvm 性能增强、 Java 垃圾收集器
Perm gen 空间不与 Heap 相交。您应该使用 -XX:PermSize 和 -XX:MaxPermSize 参数。