我有一个网站部署到一个 tomcat 服务器,该服务器已经非常迅速地用尽了它的可用堆空间(老一代)然后崩溃了。当我进行堆转储时,我发现大部分(如果不是全部)空间被大量 org.hibernate.impl.SessionFactoryImpl 实例占用(准确地说是 802,保持活动大小为 541mb)(引用自 org .apache.catalina.loader.WebappClassLoader -> java.util.concurrent.ConcurrentHashMap$HashEntry)
关于服务器服务器是由apache2使用proxypass代理的tomcat 6。
关于我使用 opencms 来管理 webapp 内容的软件,因此所有代码都通过其模板类调用 Hibernate 使用 springs HibernateTemplate 访问。数据源保存在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 没有被垃圾收集?
我可以提供所需的任何进一步信息......我真的对此感到不知所措。任何帮助深表感谢。