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的内存是达到了一个临界点,然后才开始把内存回收并返还给操作系统了。
如果有错误请在评论里帮我纠正,谢谢!
- Tomcat内存增长分析
- linux下C++进程内存增长问题的分析
- Tomcat内存溢出原因分析
- 内存增长问题。
- ado 内存 增长 解决方案
- instruments 使用,内存增长
- vector内存增长方式
- vector内存增长方式
- Tomcat内存分配 Tomcat 内存配置 Tomcat内存溢出的三种情况及解决办法分析
- Tomcat内存分配 Tomcat 内存配置 Tomcat内存溢出的三种情况及解决办法分析
- tomcat内存溢出原因分析与解决
- Tomcat内存溢出分析及解决方法
- Tomcat内存溢出解决方案及分析
- tomcat性能优化及其jvm内存分析
- Tomcat内存溢出分析及解决方法
- tomcat内存溢出原因分析与解决
- tomcat内存溢出的分析过程
- 内存不断增长的BUG
- python for循环和range内置函数
- Java的数组和list升序,降序,逆序函数Collections.sort和Arrays.sort的使用
- FE
- kernel是如何选择iommu的呢?
- 移动应用崩溃日志收集工具对比
- Tomcat内存增长分析
- SurfaceView使用实例(示波器)
- “字符型减'0'可以得到整数型”的原因分析
- [题解]bzoj2879(NOI2012)美食节
- 冒泡型事件、捕获型事件
- 找实习遇到的面试题
- HDU 5726 GCD(Sparse-Table+二分)
- 洛谷 P1255 数楼梯
- struts2如何接受非基本类型对象数组或集合