服务器端用Spring开发的系统,应用服务器版本是tomcat5.5,应用服务器操作系统windows2003。
问题:tomcat运行一个小时左右,就会占内存到1.15G左右(服务器端系统模块很大),然后就不再继续占内存,并且随着连接用户的减少也不会释放内存。
目标:如何能让tomcat自动释放内存,占得内存在1G以下。
原因分析:1.是不是我的程序中很多地方用到map和list的地方,在这些地方没有将这些变量最终指向null。
          2.是不是需要配置hibernate的缓存,如何配置?
          3.跟频繁读写数据库有关系,谁有好办法优化这种频繁的操作?

解决方案 »

  1.   

    你说的都有可能, 如果有很地方用到 list 的话,如果不出现循环引用的话,应该不会出问题吧..
      

  2.   

    list和map最好都初始化为null。
    数据库连接是宝贵的资源,用完要及时释放。
      

  3.   

    hibernate二级缓存配置如下:
    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,具体你可以上网看看。    
      

  4.   

    我暂时的解决方案是在Spring的配置中加了一个定时器,定时执行GC操作,修改了一些大批量操作的List和Map的使用。