JDK常用命令(一)jps、jstat

  曾几何时,我们学习java都不再研究jdk而直接使用IDEA、eclipse和Netbeans,仿佛我们就认为我们的程序是这些编辑器编译出来的,这时多么可笑。殊不知,编辑器就是方便我们编辑开发的,而真正编译、调试在起作用的仍然是JDK,编辑器进行非编辑操作时底层就是在调用JDK中的命令。以下命令只存在于JDK中,JRE中是没有的哦。


bin


描述


功能


jps


打印Hotspot VM进程


VMID、JVM参数、main()函数参数、主类名/Jar路径


jstat


查看Hotspot VM 运行时信息


类加载、内存、GC[可分代查看]、JIT编译

命令格式:jstat -gc 10340 250 20


jinfo


查看和修改虚拟机各项配置


-flag name=value


jmap


heapdump: 生成VM堆转储快照、查询finalize执行队列、Java堆和永久代详细信息


jmap -dump:live,format=b,file=heap.bin [VMID]


jstack


查看VM当前时刻的线程快照: 当前VM内每一条线程正在执行的方法堆栈集合


Thread.getAllStackTraces()提供了类似的功能


javap


查看经javac之后产生的JVM字节码代码


自动解析.class文件, 避免了去理解class文件格式以及手动解析class文件内容


jcmd


一个多功能工具, 可以用来导出堆, 查看Java进程、导出线程信息、 执行GC、查看性能相关数据等


几乎集合了jps、jstat、jinfo、jmap、jstack所有功能


jconsole


基于JMX的可视化监视、管理工具


可以查看内存、线程、类、CPU信息, 以及对JMX MBean进行管理


jvisualvm


JDK中最强大运行监视和故障处理工具


可以监控内存泄露、跟踪垃圾回收、执行时内存分析、CPU分析、线程分析…

一、jps

1、jps

显示线程id和执行线程主类名

2、jps - l

显示线程id和执行线程的主类名的全路径

3、jps -m

显示线程id和执行线程的主类名及其参数

4、jps -v

显示线程id和执行线程的主类名和JVM配置信息

二、jstat

  jstat <option> [-t] [-h] <pid>  <interval> <count>

option

 1 -class             显示ClassLoad的相关信息;
 2 -compiler          显示JIT编译的相关信息;
 3 -gc                显示和gc相关的堆信息;
 4 -gccapacity      显示各个代的容量以及使用情况;
 5 -gccause           显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
 6 -gcnew             显示新生代信息;
 7 -gcnewcapacity     显示新生代大小和使用情况;
 8 -gcold             显示老年代和永久代的信息;
 9 -gcoldcapacity     显示老年代的大小;
10 -gcpermcapacity    显示永久代的大小;
11 -gcutil          显示垃圾收集信息;
12 -printcompilation  输出JIT编译的方法信息;

-t      可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h  可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
interval   执行每次的间隔时间,单位为毫秒
count     用于指定输出多少次记录,缺省则会一直打印

以下为各种option对应的结果详解

1、-class

jstat -class pid 1000 5

查看pid为23814的ClassLoad相关信息,每秒钟打印一次,总共打印5次

1 Loaded 加载类的数量
2 Bytes 加载类合计大小
3 Unloaded 卸载类的数量
4 Bytes 卸载类合计大小
5 Time 表示加载和卸载类总共的耗时

2、-compiler

jstat -cpmpiler pid

查看编译情况

1 Compiled 表示编译任务执行的次数
2 Failed 表示编译失败的次数
3 Invalid 表示编译不可用的次数
4 Time 表示编译的总耗时
5 FailedType 表示最后一次编译失败的类型
6 FailedMethod 表示最后一次编译失败的类名和方法名

3、-gc

jstat -gc pid

查看垃圾回收状况

 1 S0C: Survivor0(幸存区0)大小(KB)
 2 S1C: Survivor1(幸存区1)1大小(KB)
 3 S0U: Survivor0(幸存区0)已使用大小(KB)
 4 S1U: Survivor1(幸存区1)已使用大小(KB)
 5 EC  : Eden(伊甸区)大小(KB)
 6 EU  : Eden(伊甸区)已使用大小(KB)
 7 OC :老年代大小(KB)
 8 OU : 老年代已使用大小(KB)
 9 MC : 方法区大小(KB)
10 MU : 方法区使用大小(KB)
11 CCSC : 压缩类空间大小(KB)
12 CCSU : 压缩类空间使用大小(KB)
13 YGC:新生代GC个数
14 YGCT:新生代GC的耗时(秒)
15 FGC  :Full GC次数
16 FGCT:Full GC耗时(秒)
17 GCT :GC总耗时(秒) 

4、-gccapacity

jstat -gccapacity pid

显示各个代的容量的信息

 1 NGCMN:新生代最小容量(KB)
 2 NGCMX:新生代最大容量(KB)
 3 NGC:当前新生代容量(KB)
 4 S0C:第一个幸存区大小(KB)
 5 S1C:第二个幸存区的大小(KB)
 6 EC:伊甸园区的大小(KB)
 7 OGCMN:老年代最小容量(KB)
 8 OGCMX:老年代最大容量(KB)
 9 OGC:当前老年代大小(KB)
10 OC:当前老年代大小(KB)
11 MCMN:最小元数据容量(KB)
12 MCMX:最大元数据容量(KB)
13 MC:当前元数据空间大小(KB)
14 CCSMN:最小压缩类空间大小(KB)
15 CCSMX:最大压缩类空间大小(KB)
16 CCSC:当前压缩类空间大小(KB)
17 YGC:年轻代gc次数(KB)
18 FGC:老年代GC次数(KB)

5、-gccause

jstat -gccause pid

显示最近一次GC的原因

 1 S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
 2 S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
 3 E:eden区已使用的占当前容量百分比
 4 O:old代已使用的占当前容量百分比
 5 M:当前元数据空间所占百分比
 6 CCS:当前压缩类空间所占百分比
 7 YGC:从应用程序启动到采样时年轻代中gc次数
 8 YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
 9 FGC:从应用程序启动到采样时old代(全gc)gc次数
10 FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
11 LGCC:上一次GC的原因,是G1垃圾回收器回收
12 GCC :当前GC的原因

6、-gcnew

jstat -gcnew pid

显示新生代的详细信息

 1 S0C:第一个幸存区大小
 2 S1C:第二个幸存区的大小
 3 S0U:第一个幸存区的使用大小
 4 S1U:第二个幸存区的使用大小
 5 TT:对象在新生代存活的次数
 6 MTT:对象在新生代存活的最大次数
 7 DSS:期望的幸存区大小
 8 EC:伊甸园区的大小
 9 EU:伊甸园区的使用大小
10 YGC:年轻代垃圾回收次数
11 YGCT:年轻代垃圾回收消耗时间

7、-gcnewcapacity

jstat -gcnewcapacity pid

输出新生代各个区的详细信息

 1 NGCMN:新生代最小容量
 2 NGCMX:新生代最大容量
 3 NGC:当前新生代容量
 4 S0CMX:最大幸存1区大小
 5 S0C:当前幸存1区大小
 6 S1CMX:最大幸存2区大小
 7 S1C:当前幸存2区大小
 8 ECMX:最大伊甸园区大小
 9 EC:当前伊甸园区大小
10 YGC:年轻代垃圾回收次数
11 FGC:老年代回收次数

8、-gcold

jstat -gcold pid

显示老年代GC的详细情况

 1 MC:方法区大小
 2 MU:方法区使用大小
 3 CCSC:压缩类空间大小
 4 CCSU:压缩类空间使用大小
 5 OC:老年代大小
 6 OU:老年代使用大小
 7 YGC:年轻代垃圾回收次数
 8 FGC:老年代垃圾回收次数
 9 FGCT:老年代垃圾回收消耗时间
10 GCT:垃圾回收消耗总时间

9、-gcoldcapacity

jstat -gcoldcapacitp pid

输出老年代的详细信息

1 OGCMN:老年代最小容量
2 OGCMX:老年代最大容量
3 OGC:当前老年代大小
4 OC:老年代大小
5 YGC:年轻代垃圾回收次数
6 FGC:老年代垃圾回收次数
7 FGCT:老年代垃圾回收消耗时间
8 GCT:垃圾回收消耗总时间

10、-gcutil

jstat -gcutil pid

查看每个代区域使用的百分比情况

 1 S0:幸存1区当前使用比例
 2 S1:幸存2区当前使用比例
 3 E:伊甸园区使用比例
 4 O:老年代使用比例
 5 M:元数据区使用比例
 6 CCS:压缩使用比例
 7 YGC:年轻代垃圾回收次数
 8 FGC:老年代垃圾回收次数
 9 FGCT:老年代垃圾回收消耗时间
10 GCT:垃圾回收消耗总时间

原文地址:https://www.cnblogs.com/guanghe/p/10530146.html

时间: 2024-08-29 19:00:28

JDK常用命令(一)jps、jstat的相关文章

JDK的命令行工具系列 (一) jps、jstat

概述 在我们进行故障定位和性能分析时, 可以使用Java Dump(也叫Dump文件)来帮助排查问题, 它记录了JVM运行期间的内存占用和线程执行等情况.其中Heap Dump文件是二进制格式, 它保存了某一时刻的系统信息.虚拟机属性.完整的线程Dump.所有类和对象的状态等, 是指定时刻的java堆栈的快照; Thread Dump文件是纯文本格式, 它保存了java应用程序各线程在某一时刻的运行位置. 在%JAVA_HOME%\lib目录下, 有一些诸如jps.exe.jstack.exe.

jdk自带常用命令行工具使用

下面是笔者整理的jdk自带的常用命令行工具的使用方法,全部原创,转载请注明出处,并贴上链接,谢谢! jps命令使用 jstat命令使用 jinfo命令使用 jmap命令使用 jhat命令使用 jstack命令使用 jcmd命令使用

Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正常运行,而java命令有时可以正常运行,有时却不可以,不可以的症状就是显示“找不到或无法加载主类”. 在网上找了各种资料,最终发现是因为代码里含有package语句,所以无法在cmd下运行java命令解释.class文件.而那些可以运行的文件就是因为没有使用package语句. 我这种问题的解决方法

JDK中keytool常用命令:

Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中 在keystore里,包含两种数据:密钥实体(Key entity)--密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)--只包含公钥 ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 JDK中keyt

GC问题排查常用命令-jstat

jstat查看GC的常用命令 jstat [ generalOption, outputOptions vmid, [ interva,count ] 参数:generalOption: 一般使用-gcutil查看GC情况vmid: 虚拟机进程号,即当前运行的java进程号interval: 间隔时间,单位为秒或毫秒count: 打印次数,如果缺省则打印无数次 1.查询GC总体使用情况 jstat -gcutil 23484 1000 5 结果说明: S0: 新生代中Survivor space

JDK的命令行工具

jps:虚拟机进程状况工具 jps(JVM Process Status Tool)可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID).虽然功能比较单一,但它是使用频率最高的JDK命令行工具,因为其他的JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程.对于本地虚拟机进程来说,LVMID与操作系统的进程ID(

JVM调优工具的使用(jps,jstat,jstack,jmap,jhat)

JDK本身提供了很丰富的性能监控工具,除了集成式的visualVM和jConsole外,还有jstat,jstack,jps,jmap,jhat小工具,这些都是性能调优的常用工具 我们在Java的开发中,常常会遇到下面这些问题: 1内存不足,2内存泄漏,3锁争用,4线程锁死,5java进程消耗CPU过高等 这些问题出现的时候 大家常常通过重启服务器或者调大内存来临时解决 一,jps命令 jps主要用来输出JVM中运行的进程状态信息 命令行参数选项: -q 不输出类名.Jar名和传入main方法的

JVM常用命令和性能调优建议

一.查看jvm常用命令jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat:一个极强的监视VM内存工具.可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量. jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量). jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据.并可通过远程

JDK的命令详解操作

JDK的命令详解1 rmic 功能说明: rmic 为远程对象生成 stub 和 skeleton. 语法: rmic [ options ] package-qualified-class-name(s) 补充说明: rmic 编译器根据编译后的 Java 类(含有远程对象实现)名,为远程对象生成 stub 和 skeleton(远程对象是指实现 java.rmi.Remote 接口的对象).在 rmic 命令中所给的类必须是经 javac 命令成功编译且是完全包限定的类. 命令选项  -cl