【问题标题】:High PermGen, but low Heap UsagePermGen 高,但堆使用率低
【发布时间】:2013-03-09 12:07:57
【问题描述】:

我经常在我的 java(web) 应用程序中看到 High Perm Gen。

jmap 命令,经常显示它被使用了 90%。但这似乎不会对我的应用程序造成任何问题。我的整体堆使用率非常低(大约 400 MB,其中最大内存设置为 2048 MB)。

管理生产中的应用程序的团队担心 PermGen 很高。而且往往各种问题都归咎于此。

问题:
(1) 我需要担心只是因为 PermGen 很高,当垃圾收集发生时 PermGen 不会下降吗?
(2) 我应该将最大 PermGen 大小加倍(当前为 200 MB),会有副作用吗?

【问题讨论】:

    标签: java performance memory heap-memory permgen


    【解决方案1】:

    您需要担心三件事:堆、永久代和总驻留内存。

    在您用完之前,您无需担心 perm gen。尝试增加值。

    副作用是消耗更多的 RAM。您的统计数据表明您可以使用更多的 perm gen 和更小的最大堆。

    您真正关心的不应该是时间点值。由于这是一个 Web 应用程序,您需要观察堆、永久代和总驻留内存,并了解它们如何随着时间的推移而演变。

    如果 GC 可以控制一切并且服务器可以处理典型负载和峰值负载,那么您就有了一个不错的应用程序。如果它随着时间的推移而增长,您可能需要担心内存泄漏。

    您部署在哪个应用服务器上?这很重要。与成熟的 Java EE 应用服务器相比,Tomcat 应用的总驻留内存要轻得多。

    【讨论】:

      【解决方案2】:

      (1) 我需要担心只是因为 PermGen 很高,不会 当垃圾收集发生时 PermGen 会下降?

      不。 PermGen 是为加载类信息保留的空间。除非 Web 容器取消部署 WAR 文件并且不再需要这些类,否则它不能被垃圾收集。

      (2) 如果我将最大 PermGen 大小(当前为 200 MB)加倍,将 有什么副作用吗?

      第一个明显的副作用是 JVM 会使用更多 RAM。确保分配给机器的物理 RAM 足够。 BIRT is an example of an app 尽管没有泄漏,但由于 permgen 空间而很快失败。其次,我还将调查您的 permgen 是否存在泄漏。增加 permgen 作为预防措施很好,但如果出现内存泄漏,从长远来看,它可能对应用程序没有帮助。

      leaking driver for example 可以导致更多 permgen 使用。一个好的试金石是反复热部署您的应用程序并检查对 permgen 的更改。它会一直增加直到内存不足吗?那么你就有了泄漏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        • 2020-04-23
        • 2012-11-16
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 2016-11-19
        相关资源
        最近更新 更多