session 中最好不要存放大量数据,并发小没大问题,并发一上去就不好说了。
运行时间越久,创建的对象越多,但并非所有对象都是有用的,然而由于你管理不当,垃圾回收没法将这些对象回收,日积月累,最终导致内存溢出。这就是 Java 中的内存泄漏。
从你的描述看来,程序不是在高并发时内存不足,而是在长时间运行后发生,这种内存泄漏基本排除 session 造成的可能。检查你的那些静态变量和 singleton 对象,他们的嫌疑最大。

解决方案 »

  1.   

    1.一般spring的bean默认配置都是单例的。
    销毁的方法
    <bean id="..." class="..." destroy-method="..."></bean>
    很常见的如dateSource的建立。2.session 太多,占服务器内存,易丢失,维护困难。3.数据拥塞,数据流,文件流不释放等也可能引起web运行不顺畅。。
      

  2.   


    谢谢这位朋友解答。
    现在的疑问是:
    1、struts中每个action都是交给spring去管理、每个都是一个bean,那么这些bean的scope属性到底是设置成singleton还是prototype合适呢?为什么?
    2、destroy-method 的意思是销毁这个bean的时候执行的方法,类似于注解中的@predestroy,而spring不负责bean的生命周期的话,这个方法是什么时候被调用呢?tomcat关闭?还是等客户端去调用?如果做不到真正意义上的销毁,这些对象是不是一直存放在服务器,占用服务器内存呢?
      

  3.   

    楼主用 JProbe 去跟一下吧。