JVM 堆、栈信息监测

一、堆信息

1、查看堆空间配置信息,jmap –heap +进程id

JVM 堆、栈信息监测_第1张图片

看名字即了解表示哪些区内存大小,占比

2、打印各class的实例数目,内存占用,类全名信息  jmap -histo:live  (+进程id|more),依次标识【大小排序,实例数量,内存占用大小,类名】

JVM 堆、栈信息监测_第2张图片

3、将进行堆快照导出文件  jmap–dump:live,format=b,file=aaa.bin 65474

注意:1)导出后一般结合MAT工具分析堆日志信息,可查看到对象调用链等关系;2)排查堆空间问题,建议dump2-3次,如果每次 dump都指向同一个问题,才确定问题根源 

4、打印正等候回收的对象的信息 jmap -finalizerinfo  +进程id  ;0个对象在等待回收


二、线程信息

查看线程,jstack +进程id,查看结果:

1)JVM内部的后台线程信息,这些线程往往在JVM初始化的时候就存在

"Attach Listener" daemon prio=10 tid=0x0000000052fb8000 nid=0xb8f waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   Locked ownable synchronizers:
        - None
destroyJavaVM" prio=10 tid=0x00002aaac1225800 nid=0x7208 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   Locked ownable synchronizers:
       - None

2)用户级别的线程信息,业务逻辑相关(重点关注。最容易产生死锁的地方)

"qtp496432309-42" prio=10 tid=0x00002aaaba2a1800 nid=0x7580 waiting on condition [0x00000000425e9000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000788cfb020> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
        at org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:320)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:479)
        at java.lang.Thread.run(Thread.java:662)
 
   Locked ownable synchronizers:
        - None
线程的状态:waiting on condition(等待条件发生)
线程的调用情况;
线程对资源的锁定情况;

三、JVM状态信息 

1.查看gc情况 jstat -gcutil 65474 1000 5 (间隔1s查询1次,一共查询5次)

JVM 堆、栈信息监测_第3张图片

S0\S1\E\O\M:各空间已使用容量占当前容量的比值。年轻代(S0\S1\E),老年代(O),元空间(M)

CCS:压缩使比例;YGC\FGC:年轻代\老年代 gc次数;YGCT\FGCT:年轻代\老年代 gc时间;GCT:gc总耗时时间

2.查看gc内存容量 jstat -gccapacity  65474 1000 5 


3.查看类加载信息  jstat -class 65474 1000 5

JVM 堆、栈信息监测_第4张图片

Loaded 加载class的数量
Bytes 所占用空间大小
Unloaded 未加载数量
Bytes 未加载占用空间
Time 时间

四、总结

JVM 堆、栈信息监测_第5张图片

你可能感兴趣的:(【深入Java】)