Tomcat7中使用JSF 2.2的未知内存泄漏

时间:2017-11-16 14:26:43

标签: java spring jsf memory-leaks tomcat7

我实际上面临与使用memory leakJSF2.2(Mojarra)的{​​{1}}相关的问题,我将继续详细说明:

  • 网页包含许多Tomcat7,并且有一些选项可以选择和导出数据。一切都存储在datatables中(我重新考虑了JSF的所有良好实践,但在这种情况下我被迫使用它)...不幸的是,所有session都是强制性的我知道这会消耗太多记忆,但我试着用datatables在15分钟内面对它。但即使使用它,内存也会增长到session-timeout允许的最大值,并且永远不会将内存释放回服务器,即使在数小时后也是如此。
  • 该网页实际上工作正常,但有大Tomcat7
  • 尝试实现的目的是释放已经超时的会话内存。

  • 我有点怀疑问题与会话超时时出现的memory leak有关,并且您尝试在应用中执行某些操作,在日志上打印出来:

  

de nov。 16,2017 2:55:46 PM   org.springframework.web.context.request.FacesRequestAttributes   registerDestructionCallback警告:无法注册销毁   的回调   [org.springframework.beans.factory.support.DisposableBeanAdapter@532ecd5b]   对于属性' mainBean'因为FacesRequestAttributes没有   支持这样的回调

     

de nov。 16,2017 2:55:46 PM   org.springframework.web.context.request.FacesRequestAttributes   registerDestructionCallback警告:无法注册销毁   的回调   [org.springframework.beans.factory.support.DisposableBeanAdapter@5d5d8e9e]   对于属性' otherBean'因为FacesRequestAttributes没有   支持这样的回调

  • 我有一个包含WARNING其他bean的主bean,所有bean都在会话@Autowire范围内:

mainBean.java

@Scope=("session")

otherBean.java

@Component
@Scope("session")
@Qualifier("mainBean")
public class MainBean {
        @Autowired
        private OtherBeanClass otherBean;
        ...
}

WEB-INF的web.xml(我知道我可以添加监听器@Component @Scope("session") @Qualifier("otherBean") public class OtherBean { ... } ,但结果为org.springframework.web.context.RequestContextListener

ClassNotFoundException

Tomcat的web.xml(因为它是一个非常大的文件,我只把我认为与我的问题有关):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5">
  <display-name>MainApp v3.3.0</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            /WEB-INF/applicationContext.xml
    </param-value>
  </context-param>

  <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <session-config>
      <session-timeout>10</session-timeout>
  </session-config>

  <listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

  <servlet>
    <servlet-name>MyWebApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyWebApp</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
  </servlet-mapping>


  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>main-css</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
  <context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>/WEB-INF/resources</param-value>
  </context-param>
</web-app>

如果您希望我展示更多内容以获得更好的方法,请询问。

感谢阅读,希望你能帮助我。

编辑:在kolossus的帮助小费之后 我设法在<session-config> <session-timeout>10</session-timeout> </session-config> 内找到了RequestContextListener正确的声明: (注意:org.springframework.web-3.0.6.release.jar而非.context.request.RequestContextListener

.context.RequestContextListener

最后调用了我的 <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> 方法,但我的服务器内存仍然是最大允许的。

0 个答案:

没有答案