jmap命令的使用

一、jvm 1.7 年轻代 老年代 永久代

jvm 1.8 年轻代 老年代 取消了永久代,为了和JRocket VM融合。使用元空间metaspace代替老年代,元空间不在jvm中,而是在本地内存中。

二、jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
eg.
[root@node01~]#jps
7080 Jps
6219 Bootstrap

1.class加载统计
[root@node01?~]# jstat ‐class 6219
Loaded??Bytes??Unloaded??Bytes?????Time???
??3273??7122.3????????0?????0.0???????3.98
2.编译统计
jstat -compiler 6219
3.垃圾回收统计
jstat -gc 4086 1000 5

三、jmap命令:

jmap -heap 4086

jmap -histo 4086 | more

jmap -histo:live 4086 | more

将内存使用情况dump到文件中:
jmap -dump:format=b,file=/export/servers/jvm/dump.dat 4086

四、MAT工具:

1.通过jhat对dump文件进行分析:
jhat -port 9999 /export/servers/jvm/dump.dat

OQL:
eg.
select s from java.lang.String s where s.value.length >= 100

2.通过MAT工具对dump文件进行分析
下载mat,解压到本地物理机,然后执行MemoryAnalyzer.exe

shallow heap:对象本身占用内存大小,不包括它引用的对象 retained heap:当前对象大小+当前对象可直接或间接引用到的对象的大小总和.

五、内存溢出的定位和分析:

利用mat测试内存溢出时,必须生成一个文件java_pid12644.hprof用于分析测试,为此,需要在run/debug configuration中添加运行参数:
-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

六、死锁问题:

jstack:
作用:查看jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增高了、出现了死锁、死循环等。
将正在运行的jvm的线程情况进行快照,并且打印出来。

jstack 4086 查看tomcat的所有线程状态

6种状态:
new runnable blocked waiting timed_waiting terminated

实战 死锁:
jstack 8569

Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x00007fd2bc0062c8 (object 0x00000000f115d790, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x00007fd2bc004e28 (object 0x00000000f115d7a0, a java.lang.Object),
which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
at TestDeadLock$Thread2.run(TestDeadLock.java:41)
- waiting to lock <0x00000000f115d790> (a java.lang.Object)
- locked <0x00000000f115d7a0> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)
"Thread-0":
at TestDeadLock$Thread1.run(TestDeadLock.java:23)
- waiting to lock <0x00000000f115d7a0> (a java.lang.Object)
- locked <0x00000000f115d790> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:748)

Found 1 deadlock.

七、VirsualVM工具:(待续)

猜你喜欢

转载自www.cnblogs.com/mediocreWorld/p/10934552.html