Tomcat内存增长分析

来源:互联网 发布:好用的面膜知乎 编辑:程序博客网 时间:2024/04/27 22:35

事件回放

问题:Tomcat从启动一个项目到加载完毕,这个阶段占用了500+MB
这里写图片描述

之后随便访问项目几个页面,tomcat内存蹭蹭涨到了800+MB。从启动的500+MB到800+MB期间只花了2分钟左右。(pid不同是因为截图问题)
这里写图片描述

dump对比

当时怀疑内存泄露了,于是导出刚启动tomcat的dump文件和已经涨到800多的dump文件进行对比。
这里写图片描述

这里写图片描述

监控JVM

发现没有什么占内存的对象。于是配置tomcat的监控工具来监控JVM。
修改tomcat的conf文件夹里面的tomcat-users.xml

这里写图片描述
然后通过IP:端口/manager/status来访问tomcat监控页面

这里写图片描述

这个时候发现我的JVM最大内存是1797.50 MB。(我的电脑是8G)
但是JVM的最大内存分配规则是:物理内存的1/4(<1GB)
虽然监控工具显示的最大内存我有疑问。但是操作任务管理器显示tomcat的虚拟内存始终在1024MB以内。

开始测试JVM的新生代区内存情况。
这里写图片描述
这个时候新生代区使用的内存还没释放。

这里写图片描述
新生代区的使用内存释放之后

发现tomcat内存不降反而升了。于是又查看了一遍数据,发现新生代区的Total memory内存涨了。
这说明JVM的GC没有把内存还给操作系统。

Tomcat内存配置

这个时候我以为tomcat的内存是不会降了,所以我想给Tomcat设置一个最大值不让他涨。
这里写图片描述

这种方式我试了不生效,操作任务管理器显示tomcat的虚拟内存始终在1024MB以内

打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xms256m -Xmx512m(这种方式生效)
这里写图片描述

这里写图片描述
提交大小就是分配的虚拟内存,tomcat启动的内存也从500M降到了300M。

结论

因为一直手动操作刷新页面比较累,所以想通过代码循环访问url,这样我就知道tomcat内存到底能涨到多少。(这个时候我还原了Tomcat的配置,所以虚拟内存是1024MB)
这里写图片描述

刚开始刷新的时候,发现tomcat疯狂的涨,不过也只是涨到800+MB了,然后开始慢慢往下掉了,最后掉到了300+MB。
我认为是tomcat的内存是达到了一个临界点,然后才开始把内存回收并返还给操作系统了。

如果有错误请在评论里帮我纠正,谢谢!

3 0
原创粉丝点击