Возможная утечка памяти CXF 2.4.2 Glassfish 3 - PullRequest
1 голос
/ 08 декабря 2011

Я пытаюсь понять возможную утечку памяти в моем коде.У меня есть простой веб-сервис, который получает сообщения в формате XML и записывает их в базу данных.Я заметил, что после обработки примерно 500K сообщений приложение умирает с ошибкой нехватки памяти.После крутой кривой обучения мне удалось профилировать работающее приложение и очень быстро обнаружил, что объект реализации веб-службы удерживается в куче при каждом вызове службы.Чтобы уменьшить вероятность того, что мой код был причиной, я изменил реализацию так, чтобы она возвращалась, ничего не делая.Однако куча продолжала расти.Моя среда - Glassfish 3, CXF 2.4.2 и Eclipse (динамический веб-проект).Я включил класс обслуживания и реализации ниже.Чтобы попытаться быть немного понятнее - после обработки 500 000 сообщений в куче 500 000 HL7ServiceImpl.

Я действительно в недоумении, поэтому любая помощь будет принята.

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(name = "HL7Service", targetNamespace = "http://ws.foo.bar.com/")
public interface HL7Service {
    @WebMethod(operationName = "submit", action = "urn:Submit")
    public void submit(@WebParam(name = "msg") String msg);
}
import javax.jws.WebService;

@WebService(targetNamespace = "http://ws.foo.bar.com/", endpointInterface = "com.bar.foo.ws.HL7Service", portName = "HL7ServiceImplPort", serviceName = "HL7ServiceImplService")
public class HL7ServiceImpl implements HL7Service {
    public void submit (String msg) {

    //  if (msg == null)
    //      return ("NAK"); 
    //  else
    //      EventQueue.getInstance().submit(msg);
    //    
    //  return "ACK";

        if (msg != null) { // temp
            // DO nothing
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        <jaxws:endpoint id="hl7service"
        implementor="com.bar.foo.ws.HL7ServiceImpl" address="/hl7service">
        <jaxws:features>
            <bean class="org.apache.cxf.feature.LoggingFeature" />
        </jaxws:features>
    </jaxws:endpoint>
</beans>

1 Ответ

0 голосов
/ 07 мая 2012

Хорошо, на всякий случай, если кто-то еще найдет этот вопрос. Эта проблема, похоже, была связана с конфликтом между собственной реализацией Metro Glassfish и CXF. Переход от CXF к Metro решил проблему.

...