HSDB(Hotspot Debugger)
运行
图形界面 java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB
命令行 java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB
本文使用的时命令行CLHSDB。
由于HSDB会先attach进程,然后暂停进程,所以线上慎用。。。
验证过程
使用到的类
public class Main {
private static String name = "yuck";
private static int age = 24;
public static void main(String[] args) throws IOException {
new Main();
System.in.read();
}
}
VM参数
-XX:+UseSerialGC // 默认的XX:+UseParallelGC, 我在scanoops 会报no such type的异常,不知道是不是bug...
-XX:-UseCompressedOops
找到进程pid ,attach
> jps
19852 Main
> java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB
> attach 19852
查看堆中内存使用情况
hsdb> universe
Heap Parameters:
Gen 0: eden [0x0000000012400000,0x0000000012961068,0x0000000013eb0000) space capacity = 27983872, 20.155523867461945 used
from [0x0000000013eb0000,0x0000000013eb0000,0x0000000014200000) space capacity = 3473408, 0.0 used
to [0x0000000014200000,0x0000000014200000,0x0000000014550000) space capacity = 3473408, 0.0 usedInvoc