我有EAR应用程序,可以在我的Windows 7 PC上安装的select regexp_replace('8 HAMPSHIRE RD', '\d*?\s', '');
上成功运行。要安装新版本的应用程序,我使用WAS 8.5.5.5
只复制服务器的新内置到maven-antrun-plugin
文件夹。在卸载旧的应用程序版本并成功安装新版本之后。
但是!当我查看我的任务管理器时,我注意到java进程(服务器)的内存消耗增加了大约150-200 MB。并且每次下一次更新都会相同,直到最终应用程序落入monitoredDeployableApps
。
服务器的OutOfMemoryError
设置为1024mb,但内存消耗在死亡时达到~2gb。
我还尝试使用http://gceasy.io分析详细的gc日志。它告诉我Xmx
是GC Interval avg time
。所以我可以得出结论GC经常开始,但无论如何都没有帮助。
问题是 - 每次我重新安装应用程序时,为什么内存消耗会增加而且永远不会下降?
提前谢谢!
答案 0 :(得分:3)
应用程序重启时内存增长是类加载器泄漏的标志之一 - 如果应用程序外部的某些代码持有对应用程序类的引用,则会阻止整个应用程序的类加载器被垃圾回收(因为所有类都引用它们)班级装载机)。 150MB对此非常重要,但也有其他东西可以保留。
如果您的应用程序正在创建自己的线程,那么这些是这些问题的重要来源,通过对应用程序类的引用或通过将类加载器作为其线程上下文类加载器的线程。确保在应用程序停止时清理应用程序创建的任何线程。它也可能是WebSphere组件中的错误(无法自行清理)或应用程序或第三方库中的问题(可能在JVM级别设置一些引用)。
WebSphere 8.5具有检查特定类型泄漏的功能,如本知识中心文章中所述:https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/ttrb_configmemleak.html