2013-02-17 1 views
0

Tomcat 6을 사용하여 JAX-RS 웹 서비스가 제공됩니다. Guice를 사용하여 리소스를 주입하고 서블릿을 만듭니다.JAX-RS, Tomcat 및 Guice를 사용하여 리소스가 파괴되는지 확인

은 확실히 메모리 누수가 있는데 내가 요청의 종료 또는 응용 프로그램의 종료 중 하나를 처리하고 있지 않다 때문입니다 가정합니다.

내가 지속적으로 서비스에 대한 요청을 새로 고치면 내가 톰캣의 메모리 사용이 올라 내가 Tomcat을 재활용 할 때까지 감소하지 않는 것을 볼 수 있습니다.

나는 RTFM을 시도했지만 나는 수명주기를 grokking 아니에요.

나는 그래서 내가 바보되고 있어요

public class RadWebServiceServletConfig extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new JerseyServletModule() { 
     @Override 
     protected void configureServlets() { 
      // Must configure at least one JAX-RS resource or the 
      // server will fail to start. 
      bind(Crags.class); 
      bind(IDataFacade.class).to(DataFacade.class); 
      bind(IRepository.class).to(Repository.class); 
      //filter all requests to log 
      filter("/*").through(LoggingFilter.class); 

      // Route all requests through GuiceContainer 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("com.sun.jersey.spi.container.ContainerRequestFilters", 
         "com.sun.jersey.api.container.filter.GZIPContentEncodingFilter"); 
      params.put("com.sun.jersey.spi.container.ContainerResponseFilters", 
        "com.sun.jersey.api.container.filter.GZIPContentEncodingFilter"); 
      serve("/*").with(GuiceContainer.class, params); 
     } 
     }); 
    } 
} 

를 사용하여 서블릿을 만들? 요청 또는 앱 컨텍스트의 끝을 어디에서 확인할 수 있습니까?

답변

0

적어도 서블릿이 원인 일 경우 일반 서블릿으로 전환하고 guice-servlet 확장을 삭제하는 것이 좋습니다.

추가 Guice 라이브러리

(예 guice - 서블릿 guice - 지속) 대신 버이다.

나는 메모리 누수에 대해 잘 모르지만, guice-servlet은 전체 Servlet 인프라를 다시 구현한다. 그 버그 : 그것은 또한의 ThreadLocal을 사용하고 http://code.google.com/p/google-guice/issues/list?q=RequestDispatcher

한 메모리는 그 즉시 의심해야 누수 언급 할 때, http://code.google.com/p/google-guice/source/browse/extensions/servlet/src/com/google/inject/servlet/GuiceFilter.java

참조