If you are using database, check if you close resultset or statement after you finish a query.
>但是你能确定所有的无用引用都出了作用范围么? servlet里面没有定义类属性,其他的业务bean都不是单例的,也没有静态属性。在servlet方法调用的业务bean,所以认为所有引用都出了作用范围>If you are using database, check if you close resultset or statement after you finish a query. 这部分重点检查过,使用了链接池,所有的resultset和statement都关了,不过statement对象池里的对象没有重用,每次数据库操作都新建了一个statement,所以建statement的频率比较高,不过都有关闭的,而且不是简单地返回给链接池。现在准备改成重用statement对象池里的statement,看看是否有改善。实在没招了,任何有可能的方法都不放过
can you make sure the resultsets and statements are closed when exceptions happened?
如果真的是程序的问题,那一般有哪些问题会导致内存消耗完毕呢?
假如一个没有问题的页面程序和网站,在大量用户和一定时间的访问后,tomcat会不会还是累积占用系统内存从而出现问题呢?
说明程序中无用的引用未释放,所以要查程序
程序里也没有用静态变量引用对象。所以应该不存在对无用对象的引用。项目在线人数在1000左右时是正常的,现在在线人数有2000多,resin就会有时1天,有时两三天出现内存回收不了的情况,出现这种情况的时候,jvm不断地执行full gc,整个应用就基本动不了了。
servlet里面没有定义类属性,其他的业务bean都不是单例的,也没有静态属性。在servlet方法调用的业务bean,所以认为所有引用都出了作用范围>If you are using database, check if you close resultset or statement after you finish a query.
这部分重点检查过,使用了链接池,所有的resultset和statement都关了,不过statement对象池里的对象没有重用,每次数据库操作都新建了一个statement,所以建statement的频率比较高,不过都有关闭的,而且不是简单地返回给链接池。现在准备改成重用statement对象池里的statement,看看是否有改善。实在没招了,任何有可能的方法都不放过
解决方法主要是加大TOMCAT可利用内存,并在程序当中加大内存使用。解决方法:方法:加大TOMCAT可利用内存:
在TOMCAT的目录下,也就是在TOMCAT41/bin/catalina.bat文件最前面加入
set JAVA_OPTS=-Xms800m -Xmx800m
表现效果是当你启动TOMCAT时,系统内存会增加近800M使用
操作方法:
1)、先关掉WINDOWS服务当中的TOMCAT4服务。
2)、再找到TOMCAT/BIN目录下startup.bat,双击打开它,你会发现现WINDOWS内存占用会增加近800M。
3)、执行程序,因为是TOMCAT重新编译程序,所以第一次会比较慢。结论:经过测试,我们得出如下数据:当系统传输约2000条数据时,大约近12M的净数据(不压缩时),系统辅助运行的内存大约占用150M左右的空间,也就是近200M的内存占用,而我们扩大了近800M的JAVA内存使用,这对于业务本身来说是足够了。所以你们不用担心大数据量的传递问题。基于JAVA虚拟机的原理,JAVA自动有垃圾回收机制,也就是在你对一些内存长时间不使用时(近2分钟,取决于使用频度和优先级等),就会自动垃圾回收,从而释放不用的内存占用。