发布于2026-07-08 阅读(0)
扫一扫,手机访问
jmap -dump:live,format=b,file=heap.hprof ,只保留存活对象,文件更小、分析更快,也更贴近真实泄漏状态。
- 进程卡死时再用-F强制模式:如jmap -F -dump:format=b,file=heap.hprof ,但会跳过GC清理,可能混入本该回收的对象,需在MAT中多一步过滤。
- 提前配置自动dump更稳妥:启动参数加上-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/dump/,OOM一发生,快照就已落盘,避免人工干预延误。
- 注意磁盘和权限:String堆积常导致dump文件达数GB,确保目标路径有足够空间;运行jmap的用户需对Ja va进程有读权限,对输出目录有写权限。
ja va.lang.String;关注“Retained Heap”列,排序后看前几项——哪个包下的String占比异常高?
- 点开高Retained Heap的String实例,查Dominator Tree:看它被谁dominator(支配),通常会指向某个静态Map、ThreadLocal或单例缓存对象。
- 右键→Path to GC Roots→exclude weak/soft references:排除弱引用干扰,只看强引用链;如果路径终点是ja va.lang.ThreadLocal$ThreadLocalMap或static final HashMap,基本锁定泄漏点。
public static List cache = new ArrayList<>(); ,接口每调用一次就add一个UUID字符串,且无清理逻辑;MAT中可看到该List的size持续增大,且每个元素都是新String。
- 数据库字段映射不当:MyBatis将CLOB或长文本字段映射为String,但业务只取前100字符,却把整MB内容全加载进内存;结合SQL日志+MAT中String内容预览可快速识别。
string_cache_size),接入Prometheus+Grafana实时观测。
- 保留一份修复前dump做基线:下次同类问题出现时,可用MAT的Compare Basket功能,快速比对String实例增长差异,节省70%分析时间。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8