最近有部分用户会问,为什么我的tomcat占用的内存这么高?如何才能把他减少点呢?
其实减少tomcat的内存使用量比较难,但是我们还是有一些办法的!
要想减少tomcat内存使用量,就必须对tomcat和内存的原理和关系进行了解!
[tomcat和内存的原理]
Tomcat是运行在内存之上的,几乎所有的软件的运行都会占用内存,比如您运行个QQ软件,他也占用内存,这个是物理规律,不需要我在多说什么,
我们会在每个人的tomcat上做好设置,允许他最大可使用多少内存,如果超出了,tomcat就不能在继续运行,就会出现假死,网站打开比较慢,网站打不开的情况!
[是什么在消耗tomcat内存]
Tomcat运行在内存上的,tomcat里每增加一点东西(或者说每运行一个网页),他都会占用相应的内存,比如我上传了一个图片,在浏览器里面访问他,tomcat要让这个图片显示,他会占用内存!!一个网页也是这样,比如您上传了一个jsp网页,他运行这个jsp网页的时候,他会占用一定的内存!!
上面都还是静态的比较好理解,我在说的动态的
比如一个jsp网页他显示数据库里面的10条记录,和显示1w条记录,他所消耗的内存是不一样的,有时候用户会问,为什么我的访问量也不多大,为什么会怎么占用内存呢,这个就和您的访问量,图片的大小,数据库表里面数据记录的多少,放了多少个工程有关系了,访问量只是影响内存的一个可能,还有很多影响内存的选项,我们需要综合考虑!
[tomcat和内存的其他需要注意的情况]
有的用户说,我现在用了250M内存,我升级到你们企业A的,企业A的是300M内存,这样内存就够用了吧!! 答案并不是肯定的,因为您的tomcat在24小时内是连续运行的,需要考虑他连续对内存占用的情况,当tomcat连续运行的时候,您的tomcat占用的内存也会连续的升高,至于升多高,这个不好预测,这个和您的访问量,图片的大小,数据库的记录多少,有直接关系,比如一个jsp网页他调用数据库里面的100条记录,和调用1w条记录,他所消耗的内存肯定是不一样的
[如何减少tomcat内存]
减少内存比较困难,我只能从我经验出发给大家做一些参考,可能不全面如果有更好的方法,欢迎在下面留言:
1:减少不必要的工程或者项目,我们就遇到过个用户,他内存不够用了,我们发现他webapps下放了很多工程,他说他没访问,应该不影响,其实这个是错误的,tomcat是不知道你要不要访问的,tomcat会在启动的时候把所有的工程或者项目都一股脑的加载进去,所以即使您不访问他他也会加载,如果没必要或者不打算使用他请删除他,不要放在服务器上
2:尽量减少使用框架,开源软件等,框架和开源软件用起来是比较方便,但是他们加载了大量的jar文件,尤其是在tomcat的时候,都一起加载到tomcat内存里面,而且还不释放,比如我们有框架,可能只是用了这个框架中的20%的功能,还有80%我们用不到,但是框架也一样会把这80%加载到内存里面,造成我们的内存白白的浪费 [网站一旦成型在修改框架可能不现实,我只是列出来告诉大家有条件的话可以修改]
3:尽量减少对数据库的操作,操作数据库是极大的耗费内存的操作,尤其是多表联合查询,或者表数据比较大的时候,比如从几百万条数据里面检索需要的数据的时候,那占用内存是直线上升的! 如果您的数据表比较大,请考虑压缩他到合理的范围内!比如把一个大表分为多个小表等
4:减少对文件的操作,读写文件也是比较占用内存的, 频繁的操作一些文件,会造成内存的上升,如果在加以比较多的访问量,这个内存消耗也是比较厉害的,尤其是一些文件索引,还有日志文件,一般我们不建议用户使用文件索引,一旦使用内存很快就用完了,还不好排查什么地方出了问题,另外可以减少对日志的记录,有的时候程序出问题,日志记录的就比较多,一个日志文件就是几百G,别说读写,就是打开这个文件,都需要很耗费内存的,要知道jsp对文件的读写都是在内存里操作的,所以大文件他占用的内存更是直线上升的,请减少对文件的操作!
5:图片的大小,多少也会占用内存,尤其是一些大图片,如果有条件的,可以把图片整理下!!把不需要的删除,把大图压缩后在上传!!
6:要养成良好的代码书写规范,尽量少在代码里申请变量, 要知道您在代码里申请了String aa= “”; 的砍死简单的内存在访问量大的情况下,也消耗内存比较厉害的,另外还有就是在申请完数据库连接的时候,记得释放这个数据库连接,要不然就会出现内存泄漏的问题...
7:尽量生成htm静态网页, 尽量大家把主页或者访问量比较大的网页,想办法生成htm的静态网页,这样可以有效的减少内存,增加稳定性,您看我们的主页(www.jspkongjian.net)全是htm静态网页,包括新闻这些东西,那是由于我们自己把主页生成了htm的,目的就是减少内存,增加稳定性,我在这里把我们自己生成htm的代码给出来,大家如果想也生成htm的,可以自己研究下 http://www.jspkongjian.net/news.jsp?id=396(生成htm网页教程)
来源:oschina
链接:https://my.oschina.net/u/778987/blog/598450