我经常在我的 java(web) 应用程序中看到 High Perm Gen。
jmap 命令,经常显示已使用 90%。但它似乎不会对我的应用程序造成任何问题。我的总体堆使用率非常低(大约 400 MB,其中最大内存设置为 2048 MB)。
管理生产中应用程序的团队担心 PermGen 过高。通常各种各样的问题都归因于它。
问题:
(1) 我是否需要担心,因为 PermGen 很高,当垃圾收集发生时 PermGen 不会下降吗?
(2) 如果我将最大 PermGen 大小加倍(当前为 200 MB),会有任何副作用吗?
最佳答案
(1) Do i need to be worried just becz PermGen is High, Wouldn't PermGen come down when Garbage Collection happens?
不。 PermGen是为加载类信息而保留的空间。除非 Web 容器取消部署 WAR 文件并且不再需要这些类,否则它无法被垃圾回收。
(2) Should i double the max PermGen Size (current is 200 MB), would there be any side effect of that?
第一个明显的副作用是 JVM 会使用更多的 RAM。确保分配给机器的物理 RAM 足够。 BIRT is an example of an app尽管没有泄漏,但由于永久代空间,它很快就会失败。其次,我也会调查你的永久元是否有泄漏。增加永久生成作为预防措施是可以的,但从长远来看,如果存在内存泄漏,它可能对应用程序没有帮助。
一个leaking driver for example可能会导致更多永久元的使用。一个好的试金石是重复热部署您的应用程序并检查永久元的更改。它会不断增加直到内存耗尽吗?那么你就有了泄漏。
关于java - 高 PermGen,但堆使用率低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522837/