重新安装应用程序时内存消耗增加
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 time
是 4 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
我的 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 time
是 4 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