本篇是接著上一篇文章的基礎(chǔ)上新增的內(nèi)容,上篇文章地址: http://www.reibang.com/p/c791dfa0a93d
jstat詳解
- 通過jstat命令進(jìn)行查看堆內(nèi)存使用情況
jstat命令可以查看堆內(nèi)存各部分的使用量控淡,以及加載類的數(shù)量嫌吠。命令的格式如下:
jstat [-命令選項(xiàng)] [vmid] [間隔時(shí)間/毫秒] [查詢次數(shù)] - 查看class加載統(tǒng)計(jì)
[root@node01 ~]# jps
7080 Jps
6219 Bootstrap
[root@node01 ~]# jstat ‐class 6219
Loaded Bytes Unloaded Bytes Time
3273 7122.3 0 0.0 3.98
說明:
Loaded:加載class的數(shù)量
Bytes:所占用空間大小
Unloaded:未加載數(shù)量
Bytes:未加載占用空間
Time:時(shí)間
- 查看編譯統(tǒng)計(jì)
[root@node01 ~]# jstat ‐compiler 6219
Compiled Failed Invalid Time FailedType FailedMethod
2376 1 0 8.04 1 org/apache/tomcat/util/IntrospectionUtils setProperty
說明:
Compiled:編譯數(shù)量
Failed:失敗數(shù)量
Invalid:不可用數(shù)量
Time:時(shí)間
FailedType:失敗類型
FailedMethod:失敗的方法
- 垃圾回收統(tǒng)計(jì)
[root@node01 ~]# jstat ‐gc 6219
S0C S1C S0U S1U EC EU OC OU MC
MU CCSC CCSU YGC YGCT FGC FGCT GCT
9216.0 8704.0 0.0 6127.3 62976.0 3560.4 33792.0 20434.9
23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323
#也可以指定打印的間隔和次數(shù),每1秒中打印一次掺炭,共打印5次
[root@node01 ~]# jstat ‐gc 6219 1000 5
S0C S1C S0U S1U EC EU OC OU MC
MU CCSC CCSU YGC YGCT FGC FGCT GCT
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9
23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9
23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9
23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9
23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323
9216.0 8704.0 0.0 6127.3 62976.0 3917.3 33792.0 20434.9
23808.0 23196.1 2560.0 2361.6 7 1.078 1 0.244 1.323
說明:
S0C:第一個(gè)Survivor區(qū)的大斜枳纭(KB)
S1C:第二個(gè)Survivor區(qū)的大小(KB)
S0U:第一個(gè)Survivor區(qū)的使用大薪ā(KB)
S1U:第二個(gè)Survivor區(qū)的使用大锌话(KB)
EC:Eden區(qū)的大小(KB)
EU:Eden區(qū)的使用大醒ā(KB)
OC:Old區(qū)大邪上怼(KB)
OU:Old使用大小(KB)
MC:方法區(qū)大衅┫(KB)
MU:方法區(qū)使用大懈炙獭(KB)
CCSC:壓縮類空間大小(KB)
CCSU:壓縮類空間使用大邪菀(KB)
YGC:年輕代垃圾回收次數(shù)
YGCT:年輕代垃圾回收消耗時(shí)間
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間
GCT:垃圾回收消耗總時(shí)間
jmap詳解
前面通過jstat可以對(duì)jvm堆的內(nèi)存進(jìn)行統(tǒng)計(jì)分析殊鞭,而jmap可以獲取到更加詳細(xì)的內(nèi)容,如:內(nèi)存使用情況的匯總尼桶、對(duì)內(nèi)存溢出的定位與分析操灿。
- 查看內(nèi)存使用情況
[root@node01 ~]# jmap ‐heap 6219
Attaching to process ID 6219, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.141‐b15
using thread‐local object allocation.
Parallel GC with 2 thread(s)
Heap Configuration: #堆內(nèi)存配置信息
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 488636416 (466.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 162529280 (155.0MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage: # 堆內(nèi)存的使用情況
PS Young Generation #年輕代
Eden Space:
capacity = 123731968 (118.0MB)
used = 1384736 (1.320587158203125MB)
free = 122347232 (116.67941284179688MB)
1.1191416594941737% used
From Space:
capacity = 9437184 (9.0MB)
used = 0 (0.0MB)
free = 9437184 (9.0MB)
0.0% used
To Space:
capacity = 9437184 (9.0MB)
used = 0 (0.0MB)
free = 9437184 (9.0MB)
PS Old Generation #年老代
capacity = 28311552 (27.0MB)
used = 13698672 (13.064071655273438MB)
free = 14612880 (13.935928344726562MB)
48.38545057508681% used
13648 interned Strings occupying 1866368 bytes.
- 查看內(nèi)存中對(duì)象數(shù)量及大小
#查看所有對(duì)象,包括活躍以及非活躍的
jmap ‐histo <pid> | more
#查看活躍對(duì)象
jmap ‐histo:live <pid> | more
[root@node01 ~]# jmap ‐histo:live 6219 | more
num #instances #bytes class name
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1: 37437 7914608 [C
2: 34916 837984 java.lang.String
3: 884 654848 [B
4: 17188 550016 java.util.HashMap$Node
5: 3674 424968 java.lang.Class
6: 6322 395512 [Ljava.lang.Object;
7: 3738 328944 java.lang.reflect.Method
8: 1028 208048 [Ljava.util.HashMap$Node;
9: 2247 144264 [I
10: 4305 137760 java.util.concurrent.ConcurrentHashMap$Node
...........
對(duì)象說明
B byte
C char
D double
F float
I int
J long
Z boolean
[ 數(shù)組泵督,如[I表示int[]
[L+類名 其他對(duì)象
- 將內(nèi)存使用情況dump到文件中
有些時(shí)候我們需要將jvm當(dāng)前內(nèi)存中的情況dump到文件中趾盐,然后對(duì)它進(jìn)行分析,jmap也是支持dump到文件中的小腊。
#用法:
jmap ‐dump:format=b,file=dumpFileName <pid>
#示例
jmap ‐dump:format=b,file=/tmp/dump.dat 6219
可以看到已經(jīng)在/tmp下生成了dump.dat的文件救鲤。
通過jhat對(duì)dump文件進(jìn)行分析
剛才我們將jvm的內(nèi)存dump到文件中,這個(gè)文件是一個(gè)二進(jìn)制的文件秩冈,不方便查看本缠,這時(shí)我們可以借助于jhat工具進(jìn)行查看。
#用法:
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.
打開瀏覽器進(jìn)行訪問:http://192.168.40.133:9999/
在最后面有OQL查詢功能入问。