eclipse下SSH框架容易内存溢出解决办法
原来的时候内存溢出只是好几天才发生一次,最近随着访问量的不断增大,这种现象越来越严重了,其实自己并非不知道问题出在了什么地方,因为原来做程序的时候我感觉需要不断地查询数据库这个效率实在是有些低,因此做了一个当时认为很聪明,但是现在看来很是失误的办法,就是把要查询的东西读到内存中,每隔2分钟左右的时间再去查询一次数据库,这样的话不论多么频繁的访问也不会吧程序置于死地了,但是后来才发现另外的一个问题,这些加载到内存中的新闻如何释放?现在想来原来从来没有考虑到过这个问题,内存溢出的主要原因也就在于这里了.
原来的时候使用的使自己的机器,解决内存溢出问题的办法一般都是加大内存空间,弄上一个G,怎么不够使的,但是现在使用的空间服务商的tomcat了,很多东西是不能控制的了,因此这个时候64M内存就显得捉襟见肘了.今天早上上线发现再次发生了内存溢出的问题,实在不能忍受了,就开始动手改动程序,改动主要分为三个部分
1.取消log4j的输出,在log4j.properties文件中把log4j.logger.com值更改为warn
2.取消hibernate的sql输出 在app文件中<prop key="hibernate.show_sql">false</prop>
3.修改impl程序,将延迟查询的那一部分功能注销掉,每次都直接查询
这样修改过之后再使用jconsole进行检测的确有很大幅度的下降,原来内存的使用率一直在55M左右,据64M的高压线一直很近,但是修改之后总体稳定在40M左右
但是非堆内存中的Perm Gen(share-ro)这一项一共8M使用量却高达5.4M,不过其值一直没有变化,查了一下也不知道这到底是个什么东西,希望它一直不会变化吧,这样的话就等着服务器重启一下试试了估计这样就可以解决内存溢出问题了,实践出真知,等几天看看吧.