内存泄漏分析(Mat工具使用)
2021/5/11 7:29:18
本文主要是介绍内存泄漏分析(Mat工具使用),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 工具下载
mat下载地址: https://www.eclipse.org/mat/downloads.php
2. 测试用例
每10毫秒创建一个对象,放入list中,使之不被销毁。保持每秒100个左右的对象泄漏
github地址: https://github.com/hzhulan/javarecord/blob/master/src/main/java/com/hz/leaksuspect/LeakSuspectDemo.java
package com.hz.leaksuspect; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** * @file: LeakSuspectDemo * @version: 1.0 * @Description: 内存泄漏分析 * @Author: pp_lan * @Date: 2021/5/10 */ public class LeakSuspectDemo { private static AtomicInteger count = new AtomicInteger(0); public static void main(String[] args) throws InterruptedException { LeakSuspectDemo demo = new LeakSuspectDemo(); List<Car> list = new ArrayList<>(); while (true) { list.add(demo.new Car()); TimeUnit.MILLISECONDS.sleep(20); } } public class Car { public Car() { count.getAndIncrement(); System.out.println(String.format("car对应存活数量%d", count.get())); } @Override protected void finalize() throws Throwable { super.finalize(); count.decrementAndGet(); } } }
3. 排查
3.1 运行demo
运行100s左右后,存在该对象1w个左右。运行MemeryAnalyzer进行分析
打开服务器内存快照参考 参考命令: jmap -dump:format=b,file=a.bin 27088
参考链接:https://blog.csdn.net/pp_lan/article/details/104673373 1.b部分
打开完成,获取到内存映射后,可以关闭停止demo程序
3.2 内存泄漏分析
3.3 查看可疑的内存占用情况
3.3.1 leak suspect
查看详情(Details)
发现很多Car对象创建了未被销毁,我们接下来需要查看对象调用的地方
查看调用地点
点击java.lang.Thread@ 0x..... 点击跳出菜单,选择java basic--> thread details, 进行定位。
3.6 Histogram
点击类名 List objects --> with outgoing refrence
点击 merge shortest path to Gc roots -- > excluded all phanton/soft/weak (排除虚/软/弱引用)
Object --> java basic--> thread details, 进行定位
这篇关于内存泄漏分析(Mat工具使用)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?