JVM常用监控命令

1. jps

 列出正在运行的虚拟机进程信息。

jps -l:显示主类全名

jps -v:显示启动时jvm参数

jps -q:显示main函数参数

jps -m:只输出LVMID

2. jstat

 统计信息监视工具。

2.1

1
2
3
4
5
☁  blog  jstat -gcutil 1396
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 68.89 28.63 96.31 93.85 8 0.066 2 0.110 0.177


2.1 垃圾回收统计

​ blog jstat -gc 1396 只统计一次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
☁  blog  jstat -gc 1396 1000 5  //每隔1s统计gc的情况,统计5次
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
13824.0 13824.0 0.0 0.0 240640.0 165787.3 61952.0 17737.2 35456.0 34146.1 4736.0 4444.5 8 0.066 2 0.110 0.177
13824.0 13824.0 0.0 0.0 240640.0 165787.3 61952.0 17737.2 35456.0 34146.1 4736.0 4444.5 8 0.066 2 0.110 0.177
13824.0 13824.0 0.0 0.0 240640.0 165787.3 61952.0 17737.2 35456.0 34146.1 4736.0 4444.5 8 0.066 2 0.110 0.177
13824.0 13824.0 0.0 0.0 240640.0 165787.3 61952.0 17737.2 35456.0 34146.1 4736.0 4444.5 8 0.066 2 0.110 0.177
13824.0 13824.0 0.0 0.0 240640.0 165787.3 61952.0 17737.2 35456.0 34146.1 4736.0 4444.5 8 0.066 2 0.110 0.177

(单位是kb)
S0C:S0的容量 S1C:S1的容量
S0U:S0已使用容量 S1C:S1已使用容量
EC:Eden区容量 EU:Eden区已使用容量
OC:老年代容量 OU:老年代已使用容量
MC:元空间容量 MU:元空间已使用容量
CCSC:压缩类空间容量 CCSU:压缩类空间已使用容量
YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

2.2 类加载统计

1
2
3
4
5
6
7
8
9
  blog  jstat -class 1396
Loaded Bytes Unloaded Bytes Time
7455 13821.8 0 0.0 18.52

Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:加载耗时

2.3 统计编译

1
2
3
☁  blog  jstat -compiler 1396
Compiled Failed Invalid Time FailedType FailedMethod
4210 0 0 1.43 0

2.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
☁  blog  jstat -gccapacity 1396
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
43520.0 698880.0 276992.0 13824.0 13824.0 240640.0 87552.0 1398272.0 61952.0 61952.0 0.0 1079296.0 35456.0 0.0 1048576.0 4736.0 8 2

NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:S0大小 S1C:S1大小
EC:eden区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数

新生代垃圾回收统计

https://blog.csdn.net/wangshuminjava/article/details/107041189太多了下次补

3. jinfo

 查看和调整虚拟机各项参数

1
2
3
4
5
6
7
8
☁  blog  jinfo -flag CMSInitiatingOccupancyFraction 1396
-XX:CMSInitiatingOccupancyFraction=-1

查看使用CMS收集器时,老年代使用了指定阈值的内存时,出发FullGC。默认-1
如果CMSInitiatingOccupancyFraction在0~100之间,那么由CMSInitiatingOccupancyFraction决定。
否则由按 ((100 - MinHeapFreeRatio) + (double)( CMSTriggerRatio * MinHeapFreeRatio) / 100.0) / 100.0 决定
————————————————
原文链接:https://blog.csdn.net/liubenlong007/article/details/88541589

4. jmap

 生成堆dump快照文件。

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
52
53
54
55
56
57
58
59
jmap -heap 1396
Attaching to process ID 6, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b04

using thread-local object allocation.
Garbage-First (G1) GC with 4 thread(s)

Heap Configuration:
MinHeapFreeRatio = 40
// 空闲堆空间的最小百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0~100,默认值为 40。
// 如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后。

MaxHeapFreeRatio = 70
// 空闲堆空间的最大百分比。公式同上
//如果HeapFreeRatio > MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后。

MaxHeapSize = 2147483648 (2048.0MB) //JVM 堆空间允许的最大值。
NewSize = 1073741824 (1024.0MB) //JVM 新生代堆空间的默认值。
MaxNewSize = 1073741824 (1024.0MB) //JVM 新生代堆空间允许的最大值。
OldSize = 5452592 (5.1999969482421875MB) //老年代堆空间的默认值。
NewRatio = 2 //新生代(2个Survivor区和Eden区 )与老年代(不包括永久区)的堆空间比值,表示新生代:老年代=1:2。
SurvivorRatio = 8 // eden:s0:s1=8:1:1
MetaspaceSize = 21807104 (20.796875MB) // 元空间的默认值。
CompressedClassSpaceSize = 1073741824 (1024.0MB) //
MaxMetaspaceSize = 17592186044415 MB // 元空间允许的最大值。
G1HeapRegionSize = 1048576 (1.0MB) // 每个 Region 空间的大小。

Heap Usage:
G1 Heap:
regions = 2048 // regions个数= 2G
capacity = 2147483648 (2048.0MB) // 上文可知每个region大小为1M,因此G1 region总空间为=2048 * 1
used = 454693360 (433.62937927246094MB) //已使用433M
free = 1692790288 (1614.370620727539MB) //空闲1.6G
21.17330953478813% used //使用率为 21.17%
G1 Young Generation:
Eden Space:
regions = 355
capacity = 1120927744 (1069.0MB)
used = 372244480 (355.0MB)
free = 748683264 (714.0MB)
33.20860617399439% used
Survivor Space:
regions = 7
capacity = 7340032 (7.0MB)
used = 7340032 (7.0MB)
free = 0 (0.0MB)
100.0% used
G1 Old Generation:
regions = 72
capacity = 1019215872 (972.0MB)
used = 75108848 (71.62937927246094MB)
free = 944107024 (900.3706207275391MB)
7.36927770292808% used

45017 interned Strings occupying 5168104 bytes.

原文链接:https://blog.csdn.net/claram/article/details/104635114
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  blog   jmap -histo 3865


num #instances #bytes class name
----------------------------------------------
1: 669 2725952 [I
2: 3345 1774608 [B
3: 7830 1022800 [C
4: 5556 133344 java.lang.String
5: 684 78072 java.lang.Class
6: 1400 70448 [Ljava.lang.Object;
7: 683 27320 java.util.LinkedHashMap$Entry
8: 540 17280 java.util.HashMap$Node
9: 536 17152 java.io.File
10: 325 16680 [Ljava.lang.String;
11: 50 15168 [Ljava.util.HashMap$Node;
12: 229 14656 java.net.URL

jmap -dump:format=b,file=test.dump 1396:会在当前路径下生成test.bin快照文件

5. jhat

jhat test.dump:jhat会生成一个界面,可分析dump文件,但是很难用,一般不会用它。

6. jstack

 生成虚拟机当前时刻的线程快照(threaddump),它是当前虚拟机内每一条线程正在执行的方法堆栈的集合,通过分析快照,可以定位线程出现长时间停顿的原因,比如线程间死锁、死循环、请求外部资源导致线程长时间挂起等。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!