1 查看内存中对象数量及大小
#查看所有对象,包括活跃以及非活跃的
jmap ‐histo <pid>|more
#只查看活跃对象
jmap ‐histo:live <pid>|more
例
num #instances #bytes class name
----------------------------------------------
1: 37764 26186680 [B
2: 122647 19529728 [C
3: 93460 15493288 <constMethodKlass>
4: 93460 12720848 <methodKlass>
5: 8114 10767672 <constantPoolKlass>
6: 9673 10369456 oracle.jdbc.driver.T4CPreparedStatement
7: 158710 9349776 <symbolKlass>
8: 8114 6424120 <instanceKlassKlass>
9: 6639 5976024 <constantPoolCacheKlass>
10: 98421 5213120 [I
11: 115403 3692896 java.lang.String
12: 3434 2284976 <methodDataKlass>
13: 33199 1411136 [S
14: 33341 1333640 java.util.LinkedHashMap$Entry
15: 13211 1273696 [Ljava.util.HashMap$Entry;
16: 9748 1091776 java.util.GregorianCalendar
17: 10812 951456 java.lang.reflect.Method
18: 9752 936192 sun.util.calendar.Gregorian$Date
19: 23266 930640 java.lang.ref.Finalizer
20: 8852 920608 java.lang.Class
21: 12697 673736 [[I
22: 20445 654240 java.util.HashMap$Entry
23: 8945 572480 java.net.URL
24: 9725 544600 sun.util.calendar.ZoneInfo
25: 10044 473336 [Ljava.lang.Object;
26: 15150 452088 [Ljava.lang.String;
27: 3644 437280 java.net.SocksSocketImpl
28: 10163 421464 [Z
29: 709 414056 <objArrayKlassKlass>
30: 7276 407456 java.util.LinkedHashMap
31: 9673 386920 oracle.jdbc.driver.OraclePreparedStatementWrapper
32: 9673 386920 org.logicalcobwebs.proxool.ProxyStatement
33: 11027 352864 java.util.concurrent.ConcurrentHashMap$HashEntry
34: 12078 338208 [[I
35: 6698 337816 [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;
#对象说明
B byte
C char
D double
F float
I int
J long
Z boolean
[ 数组,如[I表示int[]
[L+类名 其他对象
2、将内存使用情况dump到文件中
有些时候我们需要将jvm当前内存中的情况dump到文件中,然后对它进行分析。
#用法:
jmap ‐dump:format=b,file=dumpFileName <pid>
#示例
jmap ‐dump:format=b,file=/tmp/dump.dat 6219
3、通过jhat对dump文件进行分析
#用法:
jhat ‐port <port> <file>
#示例:
[root@node01 tmp]# jhat ‐port 9999 /tmp/dump.dat
Reading from /tmp/dump.dat...
Dump file created Mon Sep 10 01:04:21 CST 2018
Snapshot read, resolving...
Resolving 204094 objects...
Chasing references, expect 40
dots........................................
Eliminating duplicate references........................................
Snapshot resolved.
Started HTTP server on port 9999
Server is ready.
打开浏览器进行访问:http://192.168.0.112:9999/
在最后面有OQL查询功能。
4、通过MAT工具对dump文件进行分析
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。