重新安装应用程序时内存消耗增加

Memory consumption increases as I reinstall application

我的 Windows 7 PC 上安装了 EAR 应用程序,它可以在我的 WAS 8.5.5.5 上成功运行。要安装新版本的应用程序,我使用 maven-antrun-plugin 它只是将新构建的复制到服务器的 monitoredDeployableApps 文件夹中。在卸载旧应用程序版本并成功安装新版本后。

但是!当我查看我的任务管理器时,我注意到 java 进程(服务器)的内存消耗增加了 ~150-200 mb。并且每次下一次更新都会执行相同的操作,直到最终应用程序落入 OutOfMemoryError.

服务器的Xmx设置为1024mb,但当它死掉时内存消耗达到~2gb。

我还尝试用 http://gceasy.io 分析详细的 gc 日志,它告诉我 GC Interval avg time4 sec 771 ms。所以我可以得出结论,GC 经常启动,但无论如何都无济于事。

问题是 - 为什么每次重新安装我的应用程序时内存消耗都会增加而不会减少?

提前致谢!

应用程序重启时的内存增长是 class 加载程序泄漏的标志之一 - 如果应用程序外部的某些代码持有对应用程序 classes 的引用,这会阻止整个应用程序的 class 加载器免于被垃圾收集(因为所有 class es 都引用它们的 class 加载器)。 150MB 是非常大的,但也可能有其他东西被占用。

如果您的应用程序正在创建自己的线程,那么通过对应用程序 classes 的引用或通过将 class 加载器作为其线程上下文的线程,这些都是这些问题的重要来源class 装载机。确保您正在清理您的应用程序在停止时创建的所有线程。它也可能是 WebSphere 组件中的错误(无法自行清理)或您的应用程序或第三方库中的问题(可能在 JVM 级别设置了一些参考)。

WebSphere 8.5 具有一些功能来检查特定类型的泄漏,如这篇知识中心文章中所述:https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/ttrb_configmemleak.html