我有一个部署到tomcat服务器的网站,它已经非常迅速地耗尽其可用堆空间(Old Gen)然后崩溃。当我进行堆转储时,我发现大多数(如果不是全部)空间被大量的org.hibernate.impl.SessionFactoryImpl实例占用(802确切地说,保持活动大小为541mb)(从org引用) .apache.catalina.loader.WebappClassLoader - > java.util.concurrent.ConcurrentHashMap $ HashEntry)
关于服务器 服务器是由apache2使用proxypass代理的tomcat 6。
关于软件 我使用opencms来管理webapp,因此所有代码都通过其模板类调用 使用Spring HibernateTemplate访问Hibernate。数据源保存在tomcat中,并通过org.springframework.jndi.JndiObjectFactoryBean访问并注入我的数据源(org.apache.commons.dbcp.BasicDataSource),会话工厂配置如下。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list><value>com.someobjects.SomeObject</value>
</list>
</property>
有没有人知道为什么org.hibernate.impl.SessionFactoryImpl没有被垃圾收集?
我可以提供所需的任何进一步信息......我真的对此感到茫然。非常感谢任何帮助。