JDK命令行工具

我不是女神ヾ 2022-01-11 08:35 469阅读 0赞
  1. jps命令

    列出所有Java进程,输出如下:

    wKiom1jLgYugAUntAAAHOhDOheM332.png




















jps -q  只输出进程id
jps -m 输出传递给Java进程(主函数)的参数
jps -m -l -l用于输出主函数的完整路劲
jps -m -l -v -v显示传递给JVM的参数

2.jstat命令

可以观察Java应用程序运行时信息的工具,可以查看堆信息的详细情况

jstat -

option解释:
















































-class 显示ClassLoader的相关信息
-compiler 显示JIT编译的相关信息
-GC

与GC相关的堆信息

-gccause 垃圾收集相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因
-gcnew

新生代信息

-gcnewcapacity

新生代大小与使用情况
-gcold 老年代和永久代的信息
-gcoldcapacity 老年代大小
-gcpermcapacity 永久代大小
-gcutil 垃圾收集信息
-printcompilation
输出JIT编译的方法信息

-t 参数可以在输出信息前加上一个Timestamp列,显示程序运行时间。

-h 在周期性数据输出时,输出多少行数据后,跟着输出一个表头信息。

interval 输出统计数据的周期,单位毫秒。

count指定一共输出多少次数据。

例如:

(1)进程7572 的ClassLoader的相关信息,每秒钟统计一次,输出2次。

wKioL1jN4\_2BFF1SAAARWbweM6s718.png

loaded:载入类的数量。 Bytes:载入类的合计大小。

Unloaded:卸载类的数量 。 Bytes:卸载类的合计大小。

Time:加载和卸载类所花费的时间。

(2)查看JIT编译信息

wKiom1jN7kqTEs7AAAASIi0a\_ms478.png

Compiled:编译任务执行的次数。 Failed:编译失败的次数

Invalid:编译不可用的次数。 FailedType:最后一次编译失败的类型。

FailedMethod:最后一次编译失败的类名和方法名。

(3)与GC相关的堆信息

wKiom1jN8-CCQbbVAAAYlk46oUs459.png












































S0C s0(from)的大小(KB) S1C s1(from)的大小(KB) S0U

s0(from)已使用空间(KB)

EC eden区的大小(KB) EU eden区已使用空间(KB) S1U s1(from)已使用空间(KB)
OC
老年代大小(KB) OU 老年代已使用空间(KB) PC 永久区大小(KB)
YGC 新生代GC次数 YGCT 新生代GC耗时 PU 永久区已使用大小(KB)
FGC full GC次数 FGCT full GC耗时 GCT GC总耗时

(4)与gccapacity相关,包括了各个代的最值,单位(KB)。wKioL1jbCH6hE0xtAAAcgjvqs08326.png




























NGCMN 新生代最小值 NGCMX 新生代最大值 NGC 当前新生代大小
OGCMN 老年代最小值 OGCMX 老年代最大值

PGCMN 永久代最小值 PGCMX 永久代最大值

(5)显示最近一次GC的原因及当前GC的原因

wKiom1jbCH3jpqbfAAAT5Y9B-QY589.png

◇LGCC:上次GC的原因。 ◇GCC:当前GC的原因。

图中显示,最近一次GC是由于显示的System.gc()调用所引起的。当前时刻未进行GC。

(6)-gcnew查看新生代的一些详细信息。

wKioL1jbCFLgizPHAAAPQFzWyo8997.png

◇TT:新生代对象晋升到老年代对象的年龄。

◇MTT:新生代对象晋升到老年代对象的年龄最大值。

◇DSS:所需的survivor区大小。

(7)-gcnewcapacity详细输出新生代各个区的大小信息:

wKiom1jbCD-BDw0aAAAUUxCdWL8095.png

◇S0CMX:s0区的最大值(KB)。

◇S1CMX:s1区的最大值(KB)。

◇ECMX:eden区的最大值(KB)。

(8)-gcold展现老年代GC的概况。

wKioL1jbCCzTom1GAAAS1jnAhPQ091.png

(9)-gcutil:展示GC回收相关信息。

wKioL1jbCBqhhWzhAAASAkGfXZI508.png




















S0 s0区使用的百分比 S1 s1区使用的百分比 E eden区使用的百分比
O old区使用的百分比 P 永久区使用的百分比

3.jinfo:查看运行时某一个JVM参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。

jinfo

option说明:

☆-flag:打印指定JVM的参数值。

☆-flag[+|-]:打印指定JVM参数的布尔值。

☆-flag=:设置指定JVM的参数值。

(1)jinfo -flags pid打印该进程的JVM参数

wKiom1jbFUWCO\_hrAAAyl3QHF2Q394.png

(2)显示是否打印GC详细信息,下例显示通过jinfo对PrintGCDetails参数的修改,他可以在java程序运行时关闭或者打开这个开关。

wKioL1jbFSvxk8\_DAAAaEC1M-4o087.png

4.jmap:生成Java应用程序的堆快照和对象的统计信息;

使用:

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [server-id@]remote-hostname-or-IP

1)options:

executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序)core 将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务

2)基本参数:

☆-dump:[live,]format=b,file= :使用hprof二进制形式,输出jvm的heap内容到文件=. live 子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

☆-finalizerinfo :打印正等候回收的对象的信息.

☆-heap :打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

☆-histo[:live] :打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上 缀”*”. 如果live子参数加上后,只统计活的对象数量.

☆-permstat :打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父 classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.

☆-F :强迫在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

☆-h | -help :打印辅助信息

☆-J :传递参数给jmap启动的jvm.

(1)jmap -histo pid >路劲 :生成pid的Java程序对象统计信息,并输出到文件中。

wKiom1jbG9eyK-ayAAASAkGfXZI424.png

wKiom1jbHGHyFu1-AAAr3eCFZfo465.pngwKioL1jbHGCyheytAAAeMrJ03V0251.png

输出了内存中的实例数量和合计。

(2)jmap -dump:format=b,file=路劲 pid:导出Java应用程序的当前堆快照,要使用Visual VM打开,或者使用jhat命令。

wKioL1jbJA-SsuFgAAAPofWaWLs923.png

5.jhat命令

用于分析Java应用程序的堆快照内容:

下例是分析上文生成的堆快照

wKioL1jbIaWwTob1AAA9DnhO3mY651.png

jhat分析完成后,使用HTTP服务器展示其分析结果,在浏览器中访问http://127.0.0.1:7000

wKioL1jbJpjBkHbcAAFk8GkPKWU694.png

jhat服务器显示了所有非平台类信息。点击链接进入,可以查看类的超类、ClassLoader以及该类的实例等信息。

页面底部,jhat为开发人员提供了其他查询方式

wKiom1jbT\_2jH3rvAAB-0IABa14851.png

通过这些链接,开发者可以进一步查看所有类信息、所有类的实例数量以及实例的具体信息。

最后有一个链接指向OQL查询界面wKioL1jbUyGDFNaYAABDqGZNz94388.png

在方框中输入查询信息,查询格式可以点击OQL Help进入进行参考,如下图所示,

wKioL1jbUs2xx1zKAAFLpZvVjf4250.png

在方框中输入查询语句可以查询到相应的信息:如下图所示

wKiom1jbUsyjvD5xAADfGKVglrM842.png

6.jstack命令

导出java应用程序的线程堆栈

使用: jstack [-l] [文件路劲]

wKiom1jbZdizto3-AAAMgI8Ksvo029.png

wKioL1jbZdnBP3B0AACP5MZYPIg143.png

转载于:https://blog.51cto.com/10553553/1912724

发表评论

表情:
评论列表 (有 0 条评论,469人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDK常用命令工具

    双12买了深入理解Java虚拟机的书,其实在学校的时候,就看过PDF版的,但是最终还是买本书装装样子,今天说的东西是书籍提到的JDK常用命令,实验加上记录来加深一下印象。 j