记一次tomcat内存溢出的重大事故
前记:事故的前一天就发现平台不正常了,每半小时就奔溃一次,看了服务器tomcat重启导致的平台奔溃,当时还觉得是最近的数据量剧增所导致的tomcat运行内存不足,就给tomcat加了1G的运行内存就草草了事了,直到第二天上班。。。
事故现场:第二天早上前端运维人员就找上门了,平台登陆不到一分钟就奔溃。心想没道理,上服务器看了下tomcat的启动时间是上一分钟,再看看bin目录下生成了内存溢出才会生成的文件hs_err_***。(下图所示)
然后我就给tomcat又加了2个G,但是情况还是一如既往,甚至启不起来tomcat,看了下top,发现cpu暂用率不高才20个百分点,但是free men只剩下两百兆,我把两个tomcat都停了才释放了一个G的内存,但是top里占用最多的两个内存应用就是这两个tomcat还要一个客户端服务器,最近我也没有做代码上的大动作,只是修改了几个tomcat6升级7时产生的中文乱码问题的js。所以初步判断是系统缓存被占用不释放。但是为什么不是放呢(项目是老项目移植过来的,应该之前一直有这个问题,因为内存足够支撑所以没有挂)。
查询当前缓存释放的参数:
cat /proc/sys/vm/drop_caches
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓