问题描述
我正在尝试消除内存泄漏。该应用程序是使用Axis2用Java 8编写的,并且在Tomcat 9中运行。在三十分钟内,另一个应用程序QuickBooks Web Connector对其进行调用,进行五分钟的数据交换,然后再次等待三十分钟。此循环重复两个星期。之后,出现错误消息:java.lang.OutOfMemoryError:Java堆空间
我以这种方式进行内存测量:
Runtime rt = Runtime.getRuntime();
log.info(rt.freeMemory() + "_" + rt.totalMemory() + "_" + rt.maxMemory());
这是前三个呼叫的结果:
1)
184282224_347078656_1905262592
480697904_980942848_1905262592
2)
476704880_980942848_1905262592
406780536_991428608_1905262592
3)
404825328_991428608_1905262592
570512728_1026555904_1905262592
根据Axis2 docs
有一个Lifecycle.destroy(ServiceContext context)方法 当Axis2决定完成后端服务类的特定实例时,将调用destroy()。
我发现它从未被调用过,这可能是内存泄漏的原因。如何使Axis2决定调用destroy()方法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)