JProfiler监控案例--内存泄漏分析(1)

JProfiler监控案例–内存泄漏分析

通过具体例子要验证内存泄漏时,JProfiler监控上CPU、memory、GC等监控变化,以及怎么去分析查找内存泄漏原因。
下面的方法监控及验证,主要适合本地压测、本地代码功能性能验证。

1、模拟泄漏的代码

方法中for循环会一直执行,不停给list添加对象。

List temp = new ArrayList<>();
 for(int i=0;i>=0;i++){
     temp.add(i);
 }

2、准备好初始监控环境

JProfiler连接启动,进入“Live memory”视图,“Run GC”----->“Mark Current”。
JProfiler监控案例--内存泄漏分析(1)_第1张图片

3、执行方法

执行要验证的方法----->接着“Run GC”,点击“update”按钮,进行视图更新----->观察“Difference”列信息。
JProfiler监控案例--内存泄漏分析(1)_第2张图片
从上面发现,正偏移量剧增,表明有内存一直不能释放。

4、通过引用分析该对象情况

找到增长快速的对象类型,右键,选择“Show Selectiion In Heap Walker”,切换到HeapWarker 视图。
JProfiler监控案例--内存泄漏分析(1)_第3张图片
JProfiler监控案例--内存泄漏分析(1)_第4张图片
JProfiler监控案例--内存泄漏分析(1)_第5张图片
通过上面的“incoming references”、“outgoing references”等分析可以基本判断,哪个对象出现问题。在进入代码中就可以定位到问题所在。

5、Telemetries遥测上各个指标的情况

JProfiler监控案例--内存泄漏分析(1)_第6张图片
JProfiler监控案例--内存泄漏分析(1)_第7张图片
第一幅截图是,执行有内存泄漏的方法;第二幅截图是正常方法。可以发现,如果有内存泄漏,那么会出现memory持续走高,并且GC一直在进行。一般正常方法请求的话,GC不会这么频繁出现。

你可能感兴趣的:(JProfiler,内存泄漏)