从V6迁移应用程序到WebSphere V8和开始变得内存泄漏。 主要嫌疑人是org.apache.axis2。 它看起来每个应用程序调用Web服务,由WAS8创建并存储在的东西,就是所谓的ClientConfigurationContextStore名为ServiceClient对象,然后永远不会被垃圾收集的时间等。 有没有人也有类似的问题?
Answer 1:
修正了原有的强制轴1.4以上提供的SOAP实现的问题。 这是通过将两个文件在应用程序的WEB-INF /服务完成。 第一个文件是名为javax.xml.soap.MessageFactory,并包含“org.apache.axis.soap.MessageFactoryImpl”,第二个是所谓的javax.xml.soap.SOAPConnectionFactory,并包含“org.apache.axis.soap.SOAPConnectionFactoryImpl”。 所以现在在这个代码:而在此之前它返回com.ibm.ws.webservices东西javax.xml.soap.SOAPConnectionFactory.newInstance()返回一个org.apache.axis东西。 没有内存泄漏了。
Answer 2:
如果你没有在WebSphere V6的问题,有可能是在V8本身泄漏。 但它也有可能是V8正在更加严格的东西,V6发动机让你得逞的。
你检查,你打算重用的一切,你可以,而不是在每次调用重建的,你不需要重新Axis2的客户对象? 我记得我们有Axis2中的客户端代码中的一些泄漏下V6.1并意识到我们重建,我们可以不是重用的对象。
Answer 3:
在我们的项目之一,我们使用的Axis2 1.6.2作为服务客户端。 应用程序服务器是的WebSphere 7,并在测试环境中它得到了内存不时。 当我检查堆转储AxisConfiguration类有很多的AxisService类实例。 我被实例化ServiceClient为每一个请求,我看到,有时垃圾收集工作到很晚,最后确定这个对象。 因此,我们使用ServiceClient单和解决我们的问题。
文章来源: IBM WebSphere 8 memory leaks with Axis2 Web Services