【问题标题】:JVM PermGen heap not getting cleared after program terminationJVM PermGen 堆在程序终止后没有被清除
【发布时间】:2014-07-28 12:28:49
【问题描述】:

我正在 JBoss 和 Ofbiz 上运行基于 Web 的 Java 应用程序。当我使用 VisualVM 对 JVM 进行内存分析时,我发现大量的类及其对象被上传到堆中,但在应用程序终止后没有被清除/卸载。

我了解 JVM 会进行自动垃圾收集,这应确保在程序终止后清除堆。

JBoss 和 Ofbiz 应该一直运行。但似乎清理堆我们必须重新启动所有这些应用程序并重新开始。但是我们的应用程序应该是 24x7 全天候运行的。

你能告诉我这里有什么问题吗?我不确定我应该监控什么才能找到根本问题。

【问题讨论】:

    标签: java jboss garbage-collection jvm ofbiz


    【解决方案1】:

    不一定。卸载应用程序后,JVM 不需要立即清除。它只会在需要或空闲时清除(取决于使用的收集器)。有时可能是即时的,有时可能需要几分钟。

    您可以尝试调整硬件的垃圾收集(JBoss 启动选项)。此处提供文档http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

    当您卸载应用程序时,它会一直等到其所有线程停止。因此,请确保所有进程(计划的作业、待处理的数据库调用)都正常结束。

    还要检查用于您的应用服务器的最小和最大堆空间选项。内存使用量不必低于最小分配大小。

    【讨论】:

    • 感谢指点!我正在使用 VisualVM 检查内存使用情况。由于 JBoss 和 Ofbiz 一直在运行,我可以看到许多类仍在内存中加载,许多线程也处于活动状态。我不知道如何理解,哪些类和线程属于哪个应用程序。是否有任何分析工具可以帮助我获取这些信息?
    • 试试Net Beans profiler profiler.netbeans.org下面的文章详细讨论内存泄漏检测可能对你有用oracle.com/technetwork/java/javase/tooldescr-136044.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多