Memory leaks IBM WebSphere 8 Axis2 Web服务内存泄漏

Memory leaks IBM WebSphere 8 Axis2 Web服务内存泄漏,memory-leaks,websphere,axis2,Memory Leaks,Websphere,Axis2,将应用程序从v6迁移到WebSphereV8,并开始出现内存泄漏。主要嫌疑人是org.apache.axis2。看起来每次应用程序调用web服务时,WAS8都会创建一个名为ServiceClient的对象,并将其存储在名为ClientConfigurationContextStore的东西中,然后再也不会进行垃圾收集。有人有过类似的问题吗?如果您在WebSphere v6中没有问题,那么可能是v8本身存在漏洞。但也有可能是v8对v6让您逍遥法外的东西要求更严格 您是否检查过是否可以重用所有Axi

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

如果您在WebSphere v6中没有问题,那么可能是v8本身存在漏洞。但也有可能是v8对v6让您逍遥法外的东西要求更严格


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

通过强制原始Axis1.4过度提供soap实现修复了该问题。这是通过在应用程序的WEB-INF/services中放置两个文件来完成的。第一个文件名为javax.xml.soap.MessageFactory,包含“org.apache.axis.soap.MessageFactoryImpl”,第二个文件名为javax.xml.soap.SOAPConnectionFactory,包含“org.apache.axis.soap.SOAPConnectionFactoryImpl”。现在在代码中:javax.xml.soap.SOAPConnectionFactory.newInstance()在返回com.ibm.ws.webservices内容之前返回org.apache.axis内容。不再有内存泄漏。

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

您可能正在使用Axis作为外部库?您是否考虑过使用WAS的内置Web服务支持,如JAX-WS?它的实现是建立在Axis上的,但可能会更加可预测(和受支持)。但这是一个在过去10年中编写/调整/修补的庞大遗留应用程序,代码中充斥着大量的业务逻辑。因此,我宁愿不更改代码,而是调整环境。