IBM WebSphere 8内存泄漏与Axis2 Web Services有关



将应用程序从v6迁移到WebSphere v8,并开始出现内存泄漏。主要嫌疑人是org.apache.axis2。看起来,每次应用程序调用web服务时,WAS8都会创建一个名为ServiceClient的对象,并将其存储在名为ClientConfigurationContextStore的东西中,然后从不进行垃圾收集。有人遇到过类似的问题吗?

通过强制原始axis 1.4覆盖所提供的soap实现来修复问题。这是通过在应用程序的WEB-INF/服务中放置两个文件来完成的。第一个文件名为javax.xml.soap.MessageFactory,包含"org.apache.aaxis.soap.Message FactoryImpl",第二个文件称为javax.xml.soap.SOAPConnection Factory,包含了"org.apache.Aaxis.ssoap.SOAPConnection FactoryImpl'"。不再有内存泄漏。

如果您在WebSphere v6中没有问题,那么它可能是v8本身的泄漏。但也有可能v8对v6让你逍遥法外的事情更加严格。

您是否检查过是否重用了所有可以重用的Axis2客户端对象,而不是在每次调用时重新创建不需要重新创建的对象?我记得我们在WASv6.1下的Axis2客户端代码中有一些泄漏,并意识到我们正在重新创建可以重用的对象。

在我们的一个项目中,我们使用Axis2 1.6.2作为服务客户端。应用程序服务器是WebSphere 7,在测试环境中,它不时会出现内存不足的情况。当我检查堆转储时,AxisConfiguration类有很多AxisService类实例。我为每个请求实例化ServiceClient,我发现垃圾收集有时会延迟完成这个对象。所以我们使用了ServiceClient singleton,这就解决了我们的问题。

最新更新