OOM解决

来源:互联网 发布:好看的网络言情小说 编辑:程序博客网 时间:2024/06/03 00:04

近期在做系统性能测试的时候,发现系统刚开始跑得很稳定,1秒能处理20个请求。可是1个小时之后性能开始下滑,到最后几秒才能处理一个请求。通过日志发现,系统在一个小时之后,每隔几秒就会有几秒的空白。当时第一个想法就是,这家伙肯定自己“高潮”(GC)去了。可是如此高的GC频率,不用说,肯定内存泄露了。

内存泄露定位神器之:VisualVM。

然后,在程序启动的过程中设置JVM参数-Xloggc:<file>-XX:+PrintGCDateStamps启动,然后我们会得到一个关于GC的log文件。内容如下


从上面的文件,我们可以看到15:21:44.927之后,每隔几秒就会FullGC一次,执行一次FullGC耗时几秒。

内存泄露定位神器之:jmap,MAT(Eclipse MemoryAnalysis Tool

首先通过Jmap –heap [pid],得到:

接下来,我们还是把内存Dump出来看看,使用jmap –dump:format=b,file=heap.bin [pid]会生成heap.bin文件,这个文件我们是没办法看的,要用工具,JDK自带了一个Jhat,不过解析很慢,所以我们使用MAT来解析,因为我们的Heap文件有3.8G,(温馨提示:启动MAT的时候要记得根据文件设置内存大小,解析3.8G的文件至少需要4G的内存才搞的定,谢谢!)。


原创粉丝点击