JDK常用命令jps jinfo jstat的具体说明与示例
概述
JDK的bin目录下提供了很多命令工具,比如java.exe,javap.exe,javac.exe。。。。。。这些命令由jdk/lib/tools.jar类库中提供的,是对tools.jar中的类的封装。我们主要介绍一下JVM中处理运行日志、异常堆栈、GC日志、线程快照(threaddump / javacore文件)、堆转储快照(heapdump/hprof文件)等信息的相关常用命令(jhat就不再介绍了,用的比较少,目前都是用jmap+MAT分别进行生产heapdump文件的生成及分析),这些常用命令在JDK8中的官方文档地址为https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html,打开官方文档地址可以看到如下所示,我们所介绍的命令里面都有说明,可以对应着看一下。
常用命令介绍: 本节先介绍前三个,下面的后面进行介绍。
注意:我演示使用的是JDK1.8
jps:虚拟机进程状况工具
jps(JVM Process Status Tool):可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID,Process Identifier)是一致的,在Linux上使用ps命令也可以查看进程ID(例如 ps -ef | grep java 查看Java进程)。官方文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html
通过 jps -help 命令可以查看jps命令的使用说明
C:\Users\Administrator>jps -help usage: jps [-help] jps [-q] [-mlvV] [<hostid>] Definitions: <hostid>: <hostname>[:<port>]
可以看到jps命令格式:jps [option] [hostid]
jps除了查询本地Java进程,还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。jps的常用选项如下:
使用示例:
C:\Users\Administrator>jps -l 13120 sun.tools.jps.Jps 11332 14284 com.wkp.demo.ServiceapiApplication 6908 6924
jinfo:Java配置信息工具
jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。官方文档地址为:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html
通过 jinfo -help 命令可以查看jinfo命令的使用信息:其使用格式为 jinfo [option] pid
C:\Users\Administrator>jinfo -help Usage: jinfo [option] <pid> (to connect to running process) jinfo [option] <executable <core> (to connect to a core file) jinfo [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server) where <option> is one of: -flag <name> to print the value of the named VM flag -flag [+|-]<name> to enable or disable the named VM flag -flag <name>=<value> to set the named VM flag to the given value -flags to print VM flags -sysprops to print Java system properties <no option> to print both of the above -h | -help to print this help message
jinfo命令选项介绍:
使用示例:
C:\Users\Administrator>jinfo -flag MaxHeapSize 14284 -XX:MaxHeapSize=67108864
C:\Users\Administrator>jinfo -flags 14284 Attaching to process ID 14284, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.112-b15 Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=8388608 -XX:+ManagementServer -XX:MaxHeapSize=67108864 -XX:MaxNewSize=22347776 -XX:MaxTenuringThreshold=6 -XX:MinHeapDeltaBytes=196608 - XX:NewSize=2752512 -XX:OldPLABSize=16 -XX:OldSize=5636096 -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX :+PrintHeapAtGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC Command line: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=63038 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansVie w.mbeanDomain -Dspring.application.admin.enabled=true -Xms8m -Xmx64m -verbose:gc -Xloggc:D:\workspaces\hgwd-Wp\logs\hgwd-usercenter\gc.log -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+Pr intGCTimeStamps -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false - Dcom.sun.management.jmxremote.port=9004 -Djava.rmi.server.hostname=127.0.0.1 -Dfile.encoding=UTF-8
jstat:虚拟机统计信息监控工具
jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机(需要远程主机提供RMI支持)进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图像界面,只提高了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。官方文档地址为:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
使用jstat -help可以查看使用帮助
C:\Users\Administrator>jstat -help Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] Definitions: <option> An option reported by the -options option <vmid> Virtual Machine Identifier. A vmid takes the following form: <lvmid>[@<hostname>[:<port>]] Where <lvmid> is the local vm identifier for the target Java virtual machine, typically a process id; <hostname> is the name of the host running the target Java virtual machine; and <port> is the port number for the rmiregistry on the target host. See the jvmstat documentation for a more complete description of the Virtual Machine Identifier. <lines> Number of samples between header lines. <interval> Sampling interval. The following forms are allowed: <n>["ms"|"s"] Where <n> is an integer and the suffix specifies the units as milliseconds("ms") or seconds("s"). The default units are "ms". <count> Number of samples to take before terminating. -J<flag> Pass <flag> directly to the runtime system.
使用jstat -options可以查看jstat支持的option
C:\Users\Administrator>jstat -options -class -compiler -gc -gccapacity -gccause -gcmetacapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcutil -printcompilation
选项option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及租用参见下表:
其实每个option的输出内容,官方文档中都有介绍,这里就不把每一个命令都演示一遍了,感兴趣的话可以自己试一下,对照着官方文档还是很好理解的。
jstat命令格式:jstat [option vmid [interval[s|ms] [count]] ]
对于命令格式中的VMID与LVMID需要特别说明下:如果是本地虚拟机进程,VMID和LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是:[protocol:][//] lvmid [@hostname[:port]/servername]
参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每1000毫秒查询一次进程14284垃圾收集状况,一共查询5次,那命令行如下:jstat -gc 14284 1000 5
C:\Users\Administrator>jstat -gc 14284 1000 5 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 2176.0 2176.0 0.0 2176.0 17472.0 673.2 43712.0 34800.8 69760.0 66724.9 9088.0 8479.0 620 1.201 57 1.850 3.051 2176.0 2176.0 0.0 2176.0 17472.0 673.2 43712.0 34800.8 69760.0 66724.9 9088.0 8479.0 620 1.201 57 1.850 3.051 2176.0 2176.0 0.0 2176.0 17472.0 673.2 43712.0 34800.8 69760.0 66724.9 9088.0 8479.0 620 1.201 57 1.850 3.051 2176.0 2176.0 0.0 2176.0 17472.0 673.2 43712.0 34800.8 69760.0 66724.9 9088.0 8479.0 620 1.201 57 1.850 3.051 2176.0 2176.0 0.0 2176.0 17472.0 673.2 43712.0 34800.8 69760.0 66724.9 9088.0 8479.0 620 1.201 57 1.850 3.051
通过上面的option表得知-gc用于监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等的容量,我们对上面的打印做下简单介绍:
- S0C和S1C表示S0和S1的可用空间都是2176.0KB(注意这里的单位是KB);
- S0U的值表示S0区域是空的没有被占用;S1U的值是2176.0KB,说明S1被占满了;
- EC表示Eden区域的容量是17472.0KB,EU表示Eden区使用了673.2KB;
- OC和OU分别表示堆内存中的Old区的容量及使用大小;
- MC和MU分别表示方法区(JDK1.8元空间)的容量及使用大小;
- CCSC和CCSU分别表示压缩类空间的容量及使用大小;
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收(FullGC)次数
- FGCT:老年代垃圾回收(FullGC)消耗时间
- GCT:垃圾回收消耗总时间(等于YGCT+FGCT)
下面再演示下:jstat -gcutil 14284 1000 5
C:\Users\Administrator>jstat -gcutil 14284 1000 5 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 100.00 7.31 79.61 95.65 93.30 620 1.201 57 1.850 3.051 0.00 100.00 7.31 79.61 95.65 93.30 620 1.201 57 1.850 3.051 0.00 100.00 7.31 79.61 95.65 93.30 620 1.201 57 1.850 3.051 0.00 100.00 7.31 79.61 95.65 93.30 620 1.201 57 1.850 3.051 0.00 100.00 7.31 79.61 95.65 93.30 620 1.201 57 1.850 3.051
关于GC时间的上面已经介绍了,可以结合上面的jstat -gc看一下:
- S0:S0区当前使用比例为0.00%,也就是空的
- S1:S1区当前使用比例100.00%,已经满了
- E:Eden区使用比例7.31%
- O:老年代使用比例79.61%
- M:元空间使用比例95.65%
- CCS:压缩类空间使用比例93.30%
本节就先介绍到这里,下节会介绍jmap+MAT实战堆内存溢出分析。
到此这篇关于JDK常用命令jps jinfo jstat的具体说明与示例的文章就介绍到这了,更多相关JDK 常用命令 内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
【出处:美国高防服务器 网络转载请说明出处】