《深入理解java虚拟机》读书笔记(三)

这个章节主要介绍常用的JavaJDK中的命令行工具

常用的JDK命令行工具

  • jps : JVM Process Status Tool

    显示指定系统内所有的HotSpot虚拟机进程

  • jinfo : Configuration Info for Java

    显示虚拟机配置信息

  • jstat : JVM Statistics Monitoring Tool

    用于收集Hotspot虚拟机各方面的运行数据

  • jstack : JVM Stack Trace

    显示虚拟机的线程快照

  • jmap : JVM Memory Map

    生成虚拟机的内存转储快照,生成heapdump文件

  • jhat : JVM Heap Dump Browser

    用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果

jps:查看虚拟机进程信息

这个命令类似于linux的ps命令,列出本机所有java进程的pid

1
jps [ options ] [ hostid ]

例如在本人电脑执行,显示如下:

1
2
3
4
~ jps
58785 Jps
53044
55109

jinfo:查看虚拟机配置参数信息

1
jinfo [option] <pid>

option,一般使用 “-flag “来看参数大小;”flag [+|-]“ 禁用参数;”-flag =“设置参数值

jstat:查看虚拟机各运行状态信息

1
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

option,选项,我们一般使用 -gc 查看gc情况
vmid,VM的进程号,即当前运行的java进程号
interval,间隔时间,单位为秒或者毫秒
count,打印次数,如果缺省则打印无数次

1
2
3
~ jstat -gc 53044
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
0.0 23552.0 0.0 23552.0 527360.0 338944.0 405504.0 401837.1 278544.0 259673.2 40240.0 36034.9 60 4.192 0 0.000 4.192

S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时

jstack:虚拟机堆栈跟踪

jstack命令用于生成虚拟机当前时刻的线程快照。线程快照指的是当前虚拟机内的每一条线程正在执行的方法堆栈的集合,生成线程快照的作用是,可用于定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等问题,当线程出现停顿时 就可以用jstack各个线程调用的堆栈情况。

jstack命令格式

1
2
3
jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-ip

jmap:生成虚拟机内存转储快照

1
2
3
jmap [option] pid
jmap [option] executable core
jmap [option] [server-id@]remote-hostname-or-ip

常用的option选项有:
-dump 生成Java堆转储快照,格式为: -dump:[live , ]format=b , file=,其中live子参数 说明只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap 显示Java堆详细信息,如使用哪种回收器,参数配置,分代状况等

1
2
3
jmap -dump:format=b,file=Downloads/1.bat 4221
Dumping heap to /Users/haymai/Downloads/1.bat ...
Heap dump file created

dump出来的文件可以用MAT、VisualVM等工具查看,这里用jhat查看

1
2
3
4
5
6
7
8
9
10
jhat -port 8080 1.bat
Reading from 1.bat...
Dump file created Thu Dec 28 17:51:49 CST 2017
Snapshot read, resolving...
Resolving 4232934 objects...
Chasing references, expect 846 dots..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Eliminating duplicate references..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

打开浏览器输入http://127.0.0.1:8080 就可以查看了。

显示堆信息则执行jmap -heap,如下所示:

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
$ jmap -heap -J-d64 4221
Attaching to process ID 4221, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
using thread-local object allocation.
Parallel GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 44564480 (42.5MB)
MaxNewSize = 715653120 (682.5MB)
OldSize = 89653248 (85.5MB)
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 = 654835712 (624.5MB)
used = 122404352 (116.73388671875MB)
free = 532431360 (507.76611328125MB)
18.692375775620498% used
From Space:
capacity = 30408704 (29.0MB)
used = 0 (0.0MB)
free = 30408704 (29.0MB)
0.0% used
To Space:
capacity = 29360128 (28.0MB)
used = 0 (0.0MB)
free = 29360128 (28.0MB)
0.0% used
PS Old Generation
capacity = 143654912 (137.0MB)
used = 46104504 (43.96868133544922MB)
free = 97550408 (93.03131866455078MB)
32.09392798207972% used
26052 interned Strings occupying 3039136 bytes.

jhat

1
jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>]

一般和jmap配合使用,如上方的
jhat -port 8080 1.bat

叔叔,阿姨给点钱买棒棒糖吃