系统相关
首页 > 系统相关> > 性能问题之内存泄露

性能问题之内存泄露

作者:互联网

现象   问题定位   1、通过jmap命令,jmap -histo pid | head -20 ,查看当前堆内存中实例数和占用内存最多的前20个对象   2、通过jvisualvm,进行远程dump,然后把dump文件下载下来,用jvisualvm打开进行分析,可以更直观的看到JVM中对象的信息       案例 为了方便看到现象,直接用jmeter在本地进行测试,10个线程并发,运行10分钟。(备注:测试之前先将应用程序最大堆内存和最小堆内存设置成150M,便于快速出现内存溢出的情况)   1、测试过程中用Jvisualvm监控JVM如下图

图中可以看到,堆内存使用率越来越高,至于100%使用;同时CPU使用率基本与垃圾回收占用CPU使用率是一致的。

 

2、通过jmeter插件Transactions per Second可以直观查看TPS的变化情况。从下图中可以清楚地看出,接近低第4分钟的时候,TPS已经基本降为0

 

3、根据上面两个现场我们可以明确内存已经满了,现在我们就要去看下占用内存较大的对象有哪些

如下图,点击jvisualvm监视tab页右上角的“堆dump”按钮,进行远程dump;然后将dump文件下载下来。

 

4、用jvisualvm将dump文件打开,分析实例数和现在我们就要去看下占用内存大的对象

在jvisualvm中,点击文件->装入,选择下载下来的dump文件。

如下图,可以分析实例信息和对象信息了。

 

总结

什么样的场景下监控内存泄露问题? 1、在试压阶段,或者任意场景都可以考虑通过jvisualvm和jstat监控jvm的情况 2、在稳定性场景中,一定要关注JVM内存使用的情况,在长时间的压测下,最容易看出内存泄露的问题              

标签:dump,性能,内存,JVM,jvisualvm,使用率,泄露,占用
来源: https://www.cnblogs.com/daydayup-lin/p/16182092.html