您的位置:首页 > 其它

使用jmap dump 分析JVM内存状态

2017-04-29 14:25 471 查看

查看整个JVM内存状态

jmap -heap [pid]

要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致Java 进程挂起

imac:~ xdcoder$ jmap -heap 783
Attaching to process ID 783, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
MinHeapFreeRatio         = 0
MaxHeapFreeRatio         = 100
MaxHeapSize              = 4294967296 (4096.0MB)
NewSize                  = 89128960 (85.0MB)
MaxNewSize               = 1431306240 (1365.0MB)
OldSize                  = 179306496 (171.0MB)
NewRatio                 = 2
SurvivorRatio            = 8
MetaspaceSize            = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize         = 17592186044415 MB
G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:堆栈使用情况
PS Young Generation
Eden Space:
capacity = 67108864 (64.0MB)
used     = 19526232 (18.621665954589844MB)
free     = 47582632 (45.378334045410156MB)
29.09635305404663% used
From Space:
capacity = 11010048 (10.5MB)
used     = 5619728 (5.3593902587890625MB)
free     = 5390320 (5.1406097412109375MB)
51.04181198846726% used
To Space:
capacity = 11010048 (10.5MB)
used     = 0 (0.0MB)
free     = 11010048 (10.5MB)
0.0% used
PS Old Generation
capacity = 179306496 (171.0MB)
used     = 32768 (0.03125MB)
free     = 179273728 (170.96875MB)
0.01827485380116959% used

4904 interned Strings occupying 388552 bytes.


查看JVM堆中对象详细占用情况

jmap -histo [pid]

imac:~ xdcoder$ jmap -histo 783

num     #instances         #bytes  class name
----------------------------------------------
1:        286511        9516456  [Ljava.lang.Object;
2:        113692        9458248  [C
3:         31510        6249248  [B
4:        132529        4240928  java.io.ObjectStreamClass$WeakClassKey
5:         95868        3834720  java.util.TreeMap$Entry
6:         14097        3740048  [I
7:         60312        1447488  java.lang.String
8:         25273        1213104  java.util.HashMap
9:         46425        1114200  java.lang.Long
10:         10056        1045824  java.io.ObjectStreamClass
11:         10429         500592  java.util.TreeMap
12:          7332         470824  [Ljava.util.Hashtable$Entry;
13:         14637         468384  java.util.Vector
14:          4609         442464  java.lang.management.ThreadInfo
15:         12704         406528  java.util.TreeMap$KeyIterator
16:         15719         377256  java.io.SerialCallbackContext
17:          7325         351600  java.util.Hashtable


导出整个JVM 中内存信息

jmap -dump:format=b,file=文件名 [pid]

jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况

jhat -J-Xmx1024M [file]

执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000

eclipse Memory Analyzer

Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。

http://www.eclipse.org/mat/


终止线程活动

kill -3 [pid]

Linux 上找到Java所在的进程号,然后执行以上命令,线程的相关信息就输出到console

查看堆栈信息

jstack 是sun JDK 自带的工具,通过该工具可以看到JVM 中线程的运行状况,包括锁等待,线程是否在运行

执行 jstack [pid] ,线程的所有堆栈信息,包括死锁进程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: