查看JAVA堆使用情况jmap
1、查看JVM指定进程的堆内存概要 jmap -heap pid
./jmap -heap 27509
Attaching to process ID 27509, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.144-b01
using thread-local object allocation.
Parallel GC with 2 thread(s)//并行GC(ParNew)
Heap Configuration://堆内存初始化配置
//对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
MinHeapFreeRatio = 0
//对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
MaxHeapFreeRatio = 100
//对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
MaxHeapSize = 1073741824 (1024.0MB)
//对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
NewSize = 20971520 (20.0MB)
//对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
MaxNewSize = 357564416 (341.0MB)
//对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小
OldSize = 41943040 (40.0MB)
//对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
NewRatio = 2
//对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
SurvivorRatio = 8
//对应jvm启动参数-XX:MaxPermSize= :设置JVM堆的‘永生代’的最大大小
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
//JDK 8去除了永久代,引入了元空间Metaspace
MaxMetaspaceSize = 17592186044415 MB
//G1垃圾回收算法中的 region大小设置
G1HeapRegionSize = 0 (0.0MB)
Heap Usage://堆内存分布
PS Young Generation
Eden Space: //Eden区内存分布
capacity = 143130624 (136.5MB)
used = 87913480 (83.84082794189453MB)
free = 55217144 (52.65917205810547MB)
61.42185197208391% used
From Space://其中一个Survivor区的内存分布
capacity = 19922944 (19.0MB)
used = 9030480 (8.612136840820312MB)
free = 10892464 (10.387863159179688MB)
45.327036004317435% used
To Space://另一个Survivor区的内存分布
capacity = 20971520 (20.0MB)
used = 0 (0.0MB)
free = 20971520 (20.0MB)
0.0% used
PS Old Generation //当前的Old区内存分布
capacity = 462946304 (441.5MB)
used = 198115656 (188.93781280517578MB)
free = 264830648 (252.56218719482422MB)
42.79452158667628% used
27152 interned Strings occupying 3139984 bytes.
2、dump 对信息jmap dump:format=b,file=/tmp/test.dump pid
#dump 堆信息
jmap dump:format=b,file=/tmp/27509_formatb 27509
Dumping heap to /tmp/27509_formatb.dump ...
Heap dump file created
3、分析查看进程堆内存dump文件 jhat
./jhat -port 9998 /tmp/27509_formatb.dump
Reading from /tmp/27509_formatb.dump...
Dump file created Fri Mar 30 16:39:05 CST 2018
Snapshot read, resolving...
Resolving 3357315 objects...
Chasing references, expect 671 dots.........
Eliminating duplicate references......
Snapshot resolved.
Started HTTP server on port 9998
Server is ready.
#访问:http://ip:9998/ 查看
- 注意
注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即jhat -J-Xmx512m -port 9998 /tmp/27509_formatb.dump
4、 jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图
#如果带上live则只统计活对象
./jmap -histo:live 27509|more
num #instances #bytes class name
----------------------------------------------
1: 686725 95712840 [C
2: 169432 18341504 [Ljava.lang.Object;
3: 700016 16800384 java.lang.String
4: 9029 14992976 [B
5: 180480 5775360 com.caucho.env.actor.ValueActorQueue$ValueItem
6: 172076 5506432 java.util.HashMap$Node
7: 161462 3875088 java.util.ArrayList
8: 153364 3680736 java.lang.Long
9: 83866 2683712 com.caucho.loader.JarMap$JarList
10: 186 1943712 [Lcom.caucho.util.LruCache$CacheItem;
11: 6888 1937544 [I
12: 2418 1586208 io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueue
13: 5647 1500600 [Ljava.util.HashMap$Node;
14: 88934 1422944 java.lang.Object
...省略...
#说明
class name是对象类型,说明如下:
B byte
C char
D double
F float
I int
J long
Z boolean
[ 数组,如[I表示int[]
[L+类名 其他对象