【java虚拟机】jdk命令行工具
一、jps
作用:显示指定系统内所有的HotSpot虚拟机进程
命令格式:jps [options] [hostid]
1、hostid 服务器开启RMI协议时使用,为RMI注册表中注册的主机名。
2、options的含义
| 选项 | 含义 | 备注 |
| -q | 只输出java进程的pid | |
| -m | 输出虚拟机进程启动时传递给主类main()函数的参数 | |
| -l | 输出进程主类的全名。如果进程执行的是jar包,输出jar包的路径 | |
| -v | 输出虚拟机进程启动时JVM的参数列表 |
二、jstat
作用:监视虚拟机各种运行状态信息的命令行工具,(本地或远程机器的类装载,内存,垃圾收集,JIT编译等运行数据),没有GUI图形界面,它将是运行期定位虚拟机性能问题的首选工具。
命令格式:jstat [options vmid [interval [s|ms ] [count] ]
1、interval 表示查询间隔(如果省略掉interval和count两个参数,代表只查询一次)
2、count 表示查询次数
3、vmid如果不是本地虚拟机的pid,为远程机器,则该格式为:[protocol:][//]lvmid[@hostname[:port]/servername]
4、一个案例:每250毫秒查询一次进程2746的垃圾收集情况,一共查询2次
命令:
jstat -gc 2746 250 2
显示结果
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
209664.0 209664.0 6284.9 0.0 1677824.0 265109.7 3145728.0 628135.5 � � 7478 142.433 7 3.286 145.719
209664.0 209664.0 6284.9 0.0 1677824.0 265987.1 3145728.0 628135.5 � � 7478 142.433 7 3.286 145.719
5、options的含义
| 选项 | 含义 | 备注 |
| -class | 监视类转载,卸载数量,总空间以及类装载所耗费的时间 |
Loaded Bytes Unloaded Bytes Time
19045 35917.3 309 362.4 3107.40
19045 35917.3 309 362.4 3107.40
|
| -gc | 监视java堆状况,包括eden区,两个survivor区,老年代,永久代等的容量,已用空间,GC时间合计等信息 |
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
209664.0 209664.0 6284.9 0.0 1677824.0 265109.7 3145728.0 628135.5 � � 7478 142.433 7 3.286 145.719
209664.0 209664.0 6284.9 0.0 1677824.0 265987.1 3145728.0 628135.5 � � 7478 142.433 7 3.286 145.719
|
| -gccapacity | 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大,最小空间 |
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
2097152.0 2097152.0 2097152.0 209664.0 209664.0 1677824.0 3145728.0 3145728.0 3145728.0 3145728.0 � � � � 7479 7
2097152.0 2097152.0 2097152.0 209664.0 209664.0 1677824.0 3145728.0 3145728.0 3145728.0 3145728.0 � � � � 7479 7
|
| -gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
S0 S1 E O P YGC YGCT FGC FGCT GCT
2.97 0.00 34.77 19.98 � 7480 142.465 7 3.286 145.751
2.97 0.00 34.78 19.98 � 7480 142.465 7 3.286 145.751
|
| -gccause | 监视内容与-gc基本相同,但输出主要关注导致上一次gc产生的原因 |
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC 2.97 0.00 60.00 19.98 � 7480 142.465 7 3.286 145.751 Allocation Failure No GC 2.97 0.00 60.00 19.98 � 7480 142.465 7 3.286 145.751 Allocation Failure No GC |
| -gcnew | 监视新生代gc状况 |
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
209664.0 209664.0 6229.8 0.0 6 6 104832.0 1677824.0 1202288.5 7480 142.465
209664.0 209664.0 6229.8 0.0 6 6 104832.0 1677824.0 1202288.5 7480 142.465
|
| -gcnewcapacity | -gcnew与其一致,但主要关注使用到的最大,最小空间 |
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
2097152.0 2097152.0 2097152.0 209664.0 209664.0 209664.0 209664.0 1677824.0 1677824.0 7481 7
2097152.0 2097152.0 2097152.0 209664.0 209664.0 209664.0 209664.0 1677824.0 1677824.0 7481 7
|
| -gcold | 监视老年代gc状况 |
PC PU OC OU YGC FGC FGCT GCT � � 3145728.0 628811.2 7481 7 3.286 145.766 � � 3145728.0 628811.2 7481 7 3.286 145.766 |
| -gcoldcapacity | -gcold与其一致,但主要关注老年代使用到的最大,最小空间 |
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
3145728.0 3145728.0 3145728.0 3145728.0 7481 7 3.286 145.766
3145728.0 3145728.0 3145728.0 3145728.0 7481 7 3.286 145.766
|
| -gcpermcapacity | 输出永久代使用到的最大,最小空间 |
PGCMN PGCMX PGC PC YGC FGC FGCT GCT � � � � 7481 7 3.286 145.766 � � � � 7481 7 3.286 145.766 |
| -compiler | 输出JIT编译器编译过的方法,耗时等信息 |
Compiled Failed Invalid Time FailedType FailedMethod 29272 3 0 220.37 1 com/mysql/jdbc/AbandonedConnectionCleanupThread run 29272 3 0 220.37 1 com/mysql/jdbc/AbandonedConnectionCleanupThread run |
| -printcompilation | 输出已经被JIT编译的方法 |
Compiled Size Type Method
29272 11 1 java/security/SignatureSpi <init>
29272 11 1 java/security/SignatureSpi <init>
|
6、显示结果的翻译
E:表示Eden区
S0:表示survivor0区
S1:表示survivor1区
O:表示老年代
P:表示永久代
YGC:表示Minor GC或者Yong GC的次数
YGCT:表示发生YGC的总耗时,单位为秒。
FGC:表示FULL GC的次数
FGCT:表示发生FULL GC的总耗时,单位为秒。
GCT:表示所有GC的总耗时
**C:表示那个内存区的总大小,单位为KB(推测)
**U: 表示那个内存区已经使用的大小,单位为KB(推测)
**MN:表示最小
**MX:表示最大
N:代表年轻代(包含1个eden,和2个survivor)
O:代表老年代
P:代表永久代
LGCC:表示上一次GC发生的原因
TT:?
MTT:?
三、jinfo
作用:实时查看和调整虚拟机各项参数
命令格式:jinfo [options] [vmid]
1、案例
命令行: jinfo -flag CMSInitiatingOccupancyFraction 99394 输出结果: -XX:CMSInitiatingOccupancyFraction=80
四、jmap
作用:用于生成堆转储快照(一般称为heapdump或dump文件),查询finalize执行队列,java堆和永久代详细信息(如空间使用率,当前用的是哪种收集器)
命令格式:jmap [options] vmid
1、options的含义
| 选项 | 含义 | 备注 |
| -dump | 生成java堆转储快照。格式为:-dump:[live,] format=b,file=<filename>,其中live子参数说明是否只dump出存活的对象 | |
| -finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象,只在Liunx/solaris平台下有效 | |
| -heap | 显示java堆详细信息,如使用哪种回收期,参数配置,分代状况等,只在Liunx/solaris平台下有效 | |
| -histo | 显示堆中对象统计信息,包括类,实例数量,合计容量 | |
| -permstat | 以classloader为统计口径显示永久代内存状态。只在Liunx/solaris平台下有效 | |
| -F | 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。只在Liunx/solaris平台下有效 |
2、案例,生成一个快照文件
jmap -dump:format=b,file=sxf.bin 706
命令窗输出的结果
Dumping heap to /home/sxf.bin ...
Heap dump file created
五、jhat
作用:该命令是与jmap命令搭配使用,来分析jmap堆转储的快照文件。一般不常用,因为有更强大的工具。比如:Eclipse Memory Analyzer,IBM HeapAnalyzer,VisualVM工具。
命令格式:jhat [堆转储文件]
1、使用案例(分析该文件,会在服务器启动一个http服务,用于展示分析结果)
(1)执行命令
#sxf.bin文件就是借助jmap命令,从服务器上dump的堆转储快照 jhat sxf.bin
(2)控制台显示
Reading from sxf.bin... Dump file created Wed Jan 29 16:49:03 CST 2020 Snapshot read, resolving... Resolving 11800220 objects... Chasing references, expect 2360 dots........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ Eliminating duplicate references........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ Snapshot resolved. Started HTTP server on port 7000 Server is ready.
(3)浏览器输入
在浏览器输入:http://localhost:7000/

可以查看类的实例个数,类型,内容,用于分析程序
六、jstack
作用:java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因。如线程间死锁,死循环,请求外部资源导致的长时间等待等,都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
命令格式:jstack [options] vmid
1、options选项的含义
| 选项 | 含义 | 备注 |
| -F | 当正常输出的请求不被响应时,强制输出线程堆栈 | |
| -l | 除堆栈外,显示关于锁的附加信息 | |
| -m | 如果调用到本地方法的话,可以显示C/C++的堆栈 |
2、一个案例:打印线程堆栈至文件
jstack -l 706 > sxf.thread
浙公网安备 33010602011771号