服务器端用Spring开发的系统,应用服务器版本是tomcat5.5,应用服务器操作系统windows2003。
问题:tomcat运行一个小时左右,就会占内存到1.15G左右(服务器端系统模块很大),然后就不再继续占内存,并且随着连接用户的减少也不会释放内存。
目标:如何能让tomcat自动释放内存,占得内存在1G以下。
原因分析:1.是不是我的程序中很多地方用到map和list的地方,在这些地方没有将这些变量最终指向null。
2.是不是需要配置hibernate的缓存,如何配置?
3.跟频繁读写数据库有关系,谁有好办法优化这种频繁的操作?
问题:tomcat运行一个小时左右,就会占内存到1.15G左右(服务器端系统模块很大),然后就不再继续占内存,并且随着连接用户的减少也不会释放内存。
目标:如何能让tomcat自动释放内存,占得内存在1G以下。
原因分析:1.是不是我的程序中很多地方用到map和list的地方,在这些地方没有将这些变量最终指向null。
2.是不是需要配置hibernate的缓存,如何配置?
3.跟频繁读写数据库有关系,谁有好办法优化这种频繁的操作?
数据库连接是宝贵的资源,用完要及时释放。
3.1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:
4.<property name="hibernate.cache.use_second_level_cache">true</property>
1.
2.2、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个
3. 缓存工具。如下配置指定Hibernate使用EhCache缓存工具。
4.<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
1.
2.3、Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象,
3.在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:
4.<cache usage="read-only"/>
1.
2.usage="read-only"是“只读”缓存策略。
1.
2.注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!!
3.这个<cache>标签放在哪些<class>标签下面,就说明会多这些类的对象进行缓存
4.
5.4、对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,
6. 而不需要使用<cache>标签来指定。如:
7. 在hibernate.cfg.xml中添加如下配置:
8. <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" />
9.
10. 注意,这个<class-cache>标签必须放在<mapping>标签的后面!!
对于频繁读写数据库,你可以考虑用DataSource,具体你可以上网看看。