jps-q&nb"/>

JDK命令行工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK命令行工具相关的知识,希望对你有一定的参考价值。

  1. jps命令

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

    技术分享


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

2.jstat命令

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

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

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次。

技术分享

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

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

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

(2)查看JIT编译信息

技术分享

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

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

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

(3)与GC相关的堆信息

技术分享

S0Cs0(from)的大小(KB)S1Cs1(from)的大小(KB)S0U

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

ECeden区的大小(KB)EUeden区已使用空间(KB)S1Us1(from)已使用空间(KB)
OC
老年代大小(KB)OU老年代已使用空间(KB)PC永久区大小(KB)
YGC新生代GC次数YGCT新生代GC耗时PU永久区已使用大小(KB)
FGCfull GC次数FGCTfull GC耗时GCTGC总耗时

(4)与gccapacity相关,包括了各个代的最值,单位(KB)。技术分享


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

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

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


技术分享

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


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

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

技术分享

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

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

◇DSS:所需的survivor区大小。

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

技术分享

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

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

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

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

技术分享

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

技术分享

S0s0区使用的百分比S1s1区使用的百分比Eeden区使用的百分比
Oold区使用的百分比P永久区使用的百分比

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

jinfo <option> <pid>

option说明:

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

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

☆-flag<name>=<value>:设置指定JVM的参数值。

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

技术分享

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

技术分享

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

使用:

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [[email protected]]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=<filename> :使用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程序对象统计信息,并输出到文件中。

技术分享

技术分享技术分享

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

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

技术分享

5.jhat命令

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

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

技术分享

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

技术分享

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

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

技术分享

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

最后有一个链接指向OQL查询界面技术分享

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

技术分享

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

技术分享

6.jstack命令

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

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

技术分享

技术分享


本文出自 “10543553” 博客,请务必保留此出处http://10553553.blog.51cto.com/10543553/1912724

以上是关于JDK命令行工具的主要内容,如果未能解决你的问题,请参考以下文章

jdk命令行工具的基本使用

JDK命令行工具

JDK命令行监控和故障处理工具

Java之jdk命令行工具详解

JDK的命令行工具系列 javapjinfojmap

JVM命令行调优工具介绍