2012-03-19 3 views
1

Перенос приложения в WebSphere v8 из v6 и начал получать утечки памяти. Первичный подозреваемый - org.apache.axis2. Похоже, каждый раз, когда приложение вызывает веб-службу, объект, называемый ServiceClient, создается WAS8 и хранится в том, что называется ClientConfigurationContextStore, а затем никогда не собирает мусор. У кого-то была аналогичная проблема?Утечки памяти IBM WebSphere 8 с веб-службами Axis2

+0

Предположительно, вы используете Axis в качестве внешней библиотеки? Рассматривали ли вы использование встроенной поддержки веб-сервисов WAS, например JAX-WS? Его реализация построена на Axis, но предположительно будет более предсказуемой (и поддерживаемой). – dbreaux

+0

Да, приложение использует Axis. Но это чудовищное наследие, написанное/измененное/исправленное за последние 10 лет с тоннами бизнес-логики по всему коду. Поэтому я бы предпочел не менять код, а настраивать среду. –

ответ

1

Исправлена ​​ошибка, заставляя исходную ось 1.4 поставляться с реализованной реализацией мыла. Это было сделано путем размещения двух файлов в WEB-INF/сервисах приложения. Первый файл называется javax.xml.soap.MessageFactory и содержит «org.apache.axis.soap.MessageFactoryImpl», а второй называется javax.xml.soap.SOAPConnectionFactory и содержит «org.apache.axis.soap.SOAPConnectionFactoryImpl». Итак, теперь в коде это: javax.xml.soap.SOAPConnectionFactory.newInstance() возвращает материал org.apache.axis, пока он не возвращал материал com.ibm.ws.webservices. Больше нет утечек памяти.

0

Если у вас нет проблемы с WebSphere v6, возможно, это утечка в самом v8. Но также возможно, что v8 является более строгим в отношении того, что v6 позволяло вам уйти.

Вы проверили, что вы повторно используете все клиентские объекты Axis2, которые вы можете использовать, а не воссоздавать их для каждого вызова, который вам не нужен, чтобы воссоздать? Я помню, что у нас была некоторая утечка в клиентском коде Axis2 под WAS v6.1 и осознание того, что мы воссоздавали объекты, которые мы могли бы повторно использовать.

0

В одном из наших проектов мы использовали Axis2 1.6.2 в качестве сервисного клиента. Сервер приложений был WebSphere 7, а в тестовой среде время от времени он терял память. Когда я изучил кучу кучи, в классе AxisConfiguration было много экземпляров класса AxisService. Я создавал ServiceClient для каждого запроса, и я видел, что иногда сбор мусора работал поздно, чтобы завершить этот объект. Таким образом, мы использовали SingleClick ServiceClient и решили нашу проблему.

Смежные вопросы