2013-02-17 64 views
0

我使用Tomcat 6,我使用的吉斯注入我的資源,並創造了Servlet一個JAX-RS web服務提供。確保資源使用JAX-RS破壞,Tomcat和吉斯

我肯定患了內存泄漏,我想這是因爲我沒有處理請求的任何一個結束或應用程序的關閉。

如果我不斷刷新對服務請求我可以看到,內存使用Tomcat爬升不會減少,直到我的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); 
     } 
     }); 
    } 
} 

所以我是不是傻了Servlet?我在哪裏捕捉到請求或應用上下文的結尾?

回答

0

我建議切換到常規servlet和下降的吉斯 - servlet的延長,至少要找到它,如果它的原因。

附加吉斯庫(例如吉斯-的servlet,吉斯-堅持)是相當馬車。

我不知道大約每本身任何內存泄漏,但吉斯小服務程序重新實現了整個Servlet的基礎設施,看到F.E.這些錯誤:http://code.google.com/p/google-guice/issues/list?q=RequestDispatcher

它也使用一個ThreadLocal,當一個人提到內存泄漏那些應立即犯罪嫌疑人,看到http://code.google.com/p/google-guice/source/browse/extensions/servlet/src/com/google/inject/servlet/GuiceFilter.java