现在我的服务器配置是Linux+Tomcat5.5+apache2.0,然后跑一个Web应用,但是用Jmeter测试的时候发现Jmeter停止之后,Tomcat的内存占用率一直不下来,而且再开有会不断往上加,照理说GC应该会回收之前没用的对象,释放内存,但是为什么Tomcat没有释放?不可能我用的所有对象都存在内存漏洞吧.所以我想请教一下大家写代码的时候怎么控制代码没有内存漏洞,还有就是Tomcat或者JVM在多久后会回收内存,因为我的Server开了2天都没见内存下来.
还有奇怪的问题就是重起Tomcat之后,系统的内存总是清不干净,比如第一次启动Tomcat的时候,系统内存总共占用了280M,跑完一会儿Jmeter之后内存到了400M,然后停止JMeter,发现内存占用的还是400M,没有下来,然后关闭Tomcat,发现内存回到了320M,但是我就是不知道剩下的40M为什么没有回收,那些内存到哪里去了,而且试过很多次,发现每次Tomcat重起都会有残留的内存没有被回收,系统占用的内存就这样越来越多,有谁能帮忙解决下吗?谢谢大家了!

解决方案 »

  1.   

    你用Jmeter测试后,Tomcat不会立即释放内存,要等Session失效后(默认20分钟)才会回收;
    还有,你那40M是不是被Apache吃了
      

  2.   

    40M内存不是Apache吃掉的,Apache一直只用了15M不到。而且照理说把Tomcat和Apache全部shutdown之后内存都会释放,但是为什么每次shutdown都会有40M左右的内存没有被释放呢?
      

  3.   

    是否session application等对象用的过多了