VisualVM分析内存泄露

上一篇 / 下一篇  2016-08-30 15:20:36 / 个人分类:性能测试

1.监控工具:VisualVM

VisualVM是一款免费的集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力,对Java应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在MBeans上进行浏览和操作。本文主要介绍如何使用VisualVM进行性能分析及调优。

2.测试场景:

    1000个用户线程进行并发登录,然后进行购物,最后卖家发货,买家收货等操作。

3.存在的问题:

 根据VisualVM监控峰值时的堆内存变化图,据此分析存在内存泄露问题。


如下图1:在正常情况下,每次峰值时的堆占用率应该是差不多的,但通过jmeter加压后,内存值一直不断增加,下午4:55---5:00,加压一次后,堆占用率变大了。

4.分析:

  利用visualVM的堆dump功能,在加压过程中,生成堆dump文件。

    利用IBM HeapAnalyzer工具进行堆dump文件分析:如下图2


注:通过dump信息分析内存泄漏的对象。主要思路是堆内存占用比例,比例越大说明堆内存消耗越多。

这里可以看到java/util/HashMap对象占用堆内容最大,达到95%。当然这里并不是说HashMap存在问题,而是说HashMap占用的堆内存较多,不正常,至于为啥会不正常,这还依赖于该对象所处的程序块相关,找到这点问题就解决一大半了。(是购物的相关程序块)

最后需要在程序中找到使用该对象的地方,再分析程序,确定产生内存泄漏的原因。


1

1

2

2

TAG:

 

评分:0

我来说两句

Open Toolbar