一次内存泄漏的定位
记录第一次内存泄漏的定位流程
1. 内存泄漏的发现
在部署新代码的时候,发现某台机器历史数据异常(内存占用从平常的4G变为了6G,JVM Memory中的老年代使用占比从之前的<1G,快速增加到2.5G),由于均没有触发报警峰值,所以没有提前收到监控,算是意外发现的。
2. 机器异常的查看
第一次遇到这个情况,其实并不确定是因为什么,频繁youngGC,同时期的网络波动也产生的巨大的增加,就开始查看该段时间机器做了什么事情,看到有一段时间的持续网络请求,但是也不该有这么大的影响。该时间端内磁盘使用率也增加了不少,遂去机器上面看是哪里来的‘文件’。在机器上发现新增了一个叫做java.hprof的文件,大小是2.9G。经过了解,是在内存泄漏的时候产生的日志文件,并且了解到可以用MAT查看(其实之前有听过处理内存泄漏的相关分享,不过早已忘记,只能重新捡起来,这样是这个博文的动力来源)
3. MAT分析java.hprof
MAT下载地址为:http://www.eclipse.org/mat/downloads.php。接下来就是去搜索如何分析hprof文件。根据MAT中的提示定位到异常原因。
4. 总结
本次内存溢出的原因:程序中产生了一个巨大的数据(2.8G),大于JVM新生代的阈值,被保存在老年代中,。
用自己的努力创造我们的未来