我在JBoss和Ofbiz上运行基于Web的Java应用程序。当我使用VisualVM对JVM进行内存分析时,我发现大量的类及其对象正在上传到堆中,但是在应用程序终止后没有清除/卸载。
我知道JVM会自动执行垃圾收集,这应该确保在程序终止后清除堆。
JBoss和Ofbiz应该一直运行。但似乎清楚堆我们必须重新启动所有这些应用程序并重新开始。但我们的应用程序应该是全天候的。
请问这可能是什么问题?我不确定我应该监控所有事情以解决根本问题。
答案 0 :(得分:0)
不一定。卸载应用程序后,JVM无需立即清除。它只会在需要时或空闲时清除(取决于使用的收集器)。有时它可能是即时的,有时可能需要几分钟。
您可以尝试调整硬件的垃圾收集(JBoss启动选项)。文档可在此处http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
获取当你卸载一个应用程序时,它将等待所有线程停止。因此,请确保所有进程(预定作业,待处理的数据库调用)正常结束。
还要检查用于应用服务器的最小和最大堆空间选项。内存使用率不必低于最小分配大小。