Original: https://www.cnblogs.com/myna/p/7573843.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[root@localhost jdk1.7.0_79]
# jmap --help
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core
file
)
jmap [option] [server_id@]<remote server IP or
hostname
>
(to connect to remote debug server)
where <option> is one of:
<none> to print same info as Solaris pmap
-heap to print java heap summary
-histo[:live] to print histogram of java object heap;
if
the
"live"
suboption is specified, only count live objects
-permstat to print permanent generation statistics
-finalizerinfo to print information on objects awaiting finalization
-dump:<dump-options> to dump java heap
in
hprof binary
format
dump-options:
live dump only live objects;
if
not specified,
all objects
in
the heap are dumped.
format
=b binary
format
file
=<
file
> dump heap to <
file
>
Example: jmap -dump:live,
format
=b,
file
=heap.bin <pid>
-F force. Use with -dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The
"live"
suboption is not supported
in
this mode.
-h | -help to print this help message
-J<flag> to pass <flag> directly to the runtime system
|
command format
1
2
3
|
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-
id
@]remote-
hostname
-or-IP
|
parameter
option: option parameter, multiple option parameters cannot be used at the same time
pid: java process id, obtained by command ps -ef | grep java
executable: The java executable that produces the core dump
core: The core file that needs to print configuration information
remote-hostname-or-ip: hostname or ip for remote debugging
server-id: optional unique id, if multiple debug servers are running on the same remote host, use this option parameter to identify the server
options parameter
dump : generate a heap dump snapshot
F : force a dump snapshot when -dump does not respond
Example
-dump
dump heap to file, format specifies the output format, live specifies a live object, and file specifies the file name
1
2
3
|
[root@localhost jdk1.7.0_79]
# jmap -dump:live,format=b,file=dump.hprof 24971
Dumping heap to
/usr/local/java/jdk1
.7.0_79
/dump
.hprof ...
Heap dump
file
created
|
-heap
Print the general information of the heap, the algorithm used by GC, the configuration and usage of the heap, which can be used to judge the current usage of memory and garbage collection.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
[root@localhost jdk1.7.0_79]
# jmap -heap 24971
Attaching to process ID 24971, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.79-b02
using thread-
local
object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 4146069504 (3954.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 85983232 (82.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 517996544 (494.0MB)
used = 151567520 (144.54605102539062MB)
free
= 366429024 (349.4539489746094MB)
29.26033421566612% used
From Space:
capacity = 41943040 (40.0MB)
used = 0 (0.0MB)
free
= 41943040 (40.0MB)
0.0% used
To Space:
capacity = 40370176 (38.5MB)
used = 0 (0.0MB)
free
= 40370176 (38.5MB)
0.0% used
PS Old Generation
capacity = 115343360 (110.0MB)
used = 32927184 (31.401809692382812MB)
free
= 82416176 (78.59819030761719MB)
28.54709972034801% used
PS Perm Generation
capacity = 85983232 (82.0MB)
used = 54701200 (52.16712951660156MB)
free
= 31282032 (29.832870483398438MB)
63.6184506300019% used
20822 interned Strings occupying 2441752 bytes.
|
-finalizerinfo
打印等待回收的对象信息,
1
2
3
4
5
6
|
[root@localhost jdk1.7.0_79]
# jmap -finalizerinfo 24971
Attaching to process ID 24971, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.79-b02
Number of objects pending
for
finalization: 0
|
Number of objects pending
for
finalization: 0
说明当前F-QUEUE队列中并没有等待Fializer线程执行final
izer方法的对象。
-histo
打印堆的对象统计,包括对象数、内存大小等等。jmap -histo:live 这个命令执行,JVM会先触发gc,然后再统计信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
[root@localhost jdk1.7.0_79]
# jmap -histo:live 24971 | more
num
#instances #bytes class name
----------------------------------------------
1: 100134 14622728 <constMethodKlass>
2: 100134 12830128 <methodKlass>
3: 88438 12708392 [C
4: 8271 10163584 <constantPoolKlass>
5: 27806 9115784 [B
6: 8271 6225312 <instanceKlassKlass>
7: 6830 5632192 <constantPoolCacheKlass>
8: 86717 2081208 java.lang.String
9: 2264 1311720 <methodDataKlass>
10: 10880 870400 java.lang.reflect.Method
11: 8987 869888 java.lang.Class
12: 13330 747264 [[I
13: 11808 733872 [S
14: 20110 643520 java.util.concurrent.ConcurrentHashMap$HashEntry
15: 18574 594368 java.util.HashMap$Entry
16: 3668 504592 [Ljava.util.HashMap$Entry;
17: 30698 491168 java.lang.Integer
18: 2247 486864 [I
19: 7486 479104 java.net.URL
20: 8032 453616 [Ljava.lang.Object;
21: 10259 410360 java.util.LinkedHashMap$Entry
22: 699 380256 <objArrayKlassKlass>
23: 5782 277536 org.apache.catalina.loader.ResourceEntry
24: 8327 266464 java.lang.ref.WeakReference
25: 2374 207928 [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;
26: 3440 192640 java.util.LinkedHashMap
27: 4779 191160 java.lang.ref.SoftReference
28: 3576 171648 java.util.HashMap
29: 10080 161280 java.lang.Object
|
jmap -histo:live 24971 | grep com.yuhuo 查询类名包含com.yuhuo的信息
jmap -histo:live 24971 | grep com.yuhuo > histo.txt 保存信息到histo.txt文件
附 - jmap输出中class name非自定义类的说明:
BaseType Character | Type | Interpretation |
---|---|---|
B | byte | signed byte |
C | char | Unicode character |
D | double | double-precision floating-point value |
F | float | single-precision floating-point value |
I | int | integer |
J | long | long integer |
L; | reference | an instance of class |
S | short | signed short |
Z | boolean | true or false |
[ | reference | one array dimension,[I表示int[] |
-permstat
打印Java堆内存的永久区的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@localhost jdk1.7.0_79]
# jmap -permstat 24971
Attaching to process ID 24971, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.79-b02
finding class loader instances ..
done
.
computing per loader stat ..
done
.
please wait.. computing liveness....................................................liveness analysis may be inaccurate ...
class_loader classes bytes parent_loader alive?
type
<bootstrap> 3034 18149440 null live <internal>
0x000000070a88fbb8 1 3048 null dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070a914860 1 3064 0x0000000709035198 dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070a9fc320 1 3056 0x0000000709035198 dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070adcb4c8 1 3064 0x0000000709035198 dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070a913760 1 1888 0x0000000709035198 dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x0000000709f3fd40 1 3032 null dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070923ba78 1 3088 0x0000000709035260 dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070a88fff8 1 3048 null dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
0x000000070adcbc58 1 1888 0x0000000709035198 dead sun
/reflect/DelegatingClassLoader
@0x0000000703c50b58
|
-F
强制模式。如果指定的pid没有响应,请使用jmap -dump或jmap -histo选项。此模式下,不支持live子选项。