Poison

Eclipse Memory Analyzer

Config

配置文件位于:/Applications/mat.app/Contents/Eclipse/MemoryAnalyzer.ini,示例配置如下:

1
2
3
4
5
6
7
8
9
10
-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.1100.v20190907-0426
-vm
/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin
-vmargs
-Xmx6g
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread

注意其中的 -Xmx 根据需要分析的堆大小进行配置,如果该值不足以支撑需要分析的堆转储那么容易出现 CPU 跑满的情况,即持续 GC,导致无法进行下一步。

OQL
1
2
3
4
5
6
7
8
9
SELECT s.pieceIndex, toString(s.key) FROM me.tianshuang.bitmap.dto.BitmapPieceKeyDTO s WHERE (toString(s.key) like "xxx.*")

SELECT * FROM io.prometheus.client.CollectorRegistry

SELECT x, x.capacity FROM java.nio.DirectByteBuffer x WHERE (x.cleaner != null)

SELECT * FROM INSTANCEOF java.lang.Class c WHERE c.@displayName.contains("class org.apache.hive.service.server.ThreadFactoryWithGarbageCleanup ")

SELECT toString(d.data) FROM org.apache.zookeeper.server.DataNode d
Reference

Memory Analyzer Configuration
Reachability
Shallow vs. Retained Heap
Dominator Tree
Unreachable objects
Memory Analyzer (MAT)
get static fields of a class in a heap dump in OQL - Stack Overflow