目前有一已上线试运行项目,Spring+Struts2+Hibernate,外加Quartz框架跑定时任务,Hibernate lazy="true",自然用上了openSessionInViewFilter,Ehcache二级缓存仅缓存只读的一小部分数据,应用服务器采用Tomcat6,物理服务器Linux+4G RAM,server.xml配置如下:
|
JVM配置参数如下:
|
现在情况是,JVM内存最大配了2G,查看tomcat list applications 默认session有效时间(30分)内也就30-50个session,server status 过半天,free memory就剩100多M了,甚至就个位数了,GC也仅能回收几十M,必须重启,jmap取得堆转储文件,用Eclipse Memoery Analyzer分析,内存泄漏,其中80%多是被连接占用,如下:
89 instances of "org.hibernate.impl.SessionFactoryImpl", loaded by "org.apache.catalina.loader.WebappClassLoader @ 0x8bead108" occupy 854,135,176 (82.98%) bytes.
These instances are referenced from one instance of "java.util.HashMap$Entry[]", loaded by "
|
好像Quartz的嫌疑最大,在proxool管理页面,可以看到我初始连接开了12个,最大连接数为128个,当其中一个quartz任务线程启动,而事实上任务本身只是发了一条语句而已,活动连接数居然一下子就到68个了,关键是任务都是受控于Spring声明式事务内的啊,不需要我们显式的开关吧,吐血了,下面再附上applicationContext.xml:
|
[该贴被tianyarider于2010-11-24 13:57修改过]