程序终止后JVM PermGen堆未被清除

时间:2014-07-28 12:28:50

标签: java jboss garbage-collection jvm ofbiz

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

我知道JVM会自动执行垃圾收集,这应该确保在程序终止后清除堆。

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

请问这可能是什么问题?我不确定我应该监控所有事情以解决根本问题。

1 个答案:

答案 0 :(得分:0)

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

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

获取

当你卸载一个应用程序时,它将等待所有线程停止。因此,请确保所有进程(预定作业,待处理的数据库调用)正常结束。

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