曾几何时,我们学习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

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

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

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

1、-class

jstat -class pid 1000 5

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

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

2、-compiler

jstat -cpmpiler pid

查看编译情况

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

3、-gc

jstat -gc pid

查看垃圾回收状况

 S0C: Survivor0(幸存区0)大小(KB)
S1C: Survivor1(幸存区1)1大小(KB)
S0U: Survivor0(幸存区0)已使用大小(KB)
S1U: Survivor1(幸存区1)已使用大小(KB)
EC : Eden(伊甸区)大小(KB)
EU : Eden(伊甸区)已使用大小(KB)
OC :老年代大小(KB)
OU : 老年代已使用大小(KB)
MC : 方法区大小(KB)
MU : 方法区使用大小(KB)
CCSC : 压缩类空间大小(KB)
CCSU : 压缩类空间使用大小(KB)
YGC:新生代GC个数
YGCT:新生代GC的耗时(秒)
FGC :Full GC次数
FGCT:Full GC耗时(秒)
GCT :GC总耗时(秒) 

4、-gccapacity

jstat -gccapacity pid

显示各个代的容量的信息

 NGCMN:新生代最小容量(KB)
NGCMX:新生代最大容量(KB)
NGC:当前新生代容量(KB)
S0C:第一个幸存区大小(KB)
S1C:第二个幸存区的大小(KB)
EC:伊甸园区的大小(KB)
OGCMN:老年代最小容量(KB)
OGCMX:老年代最大容量(KB)
OGC:当前老年代大小(KB)
OC:当前老年代大小(KB)
MCMN:最小元数据容量(KB)
MCMX:最大元数据容量(KB)
MC:当前元数据空间大小(KB)
CCSMN:最小压缩类空间大小(KB)
CCSMX:最大压缩类空间大小(KB)
CCSC:当前压缩类空间大小(KB)
YGC:年轻代gc次数(KB)
FGC:老年代GC次数(KB)

5、-gccause

jstat -gccause pid

显示最近一次GC的原因

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

6、-gcnew

jstat -gcnew pid

显示新生代的详细信息

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

7、-gcnewcapacity

jstat -gcnewcapacity pid

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

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

8、-gcold

jstat -gcold pid

显示老年代GC的详细情况

 MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

9、-gcoldcapacity

jstat -gcoldcapacitp pid

输出老年代的详细信息

 OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

10、-gcutil

jstat -gcutil pid

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

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

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

  1. Java常用命令:jps、jstack、jmap、jstat(带有实例教程)

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013310517/article/details/80990924 查看Java进程:jps ...

  2. JDK常用命令行工具(基于JDK10)

    虽然我是在jdk10环境下, 但是大体上和jdk8是差不多的. 总共有这么多 本来想着一口气把所有命令都边学边总结一下的, 结果发现....有些还真的不是很常用....或者说我这个水平还接触不到那么多 ...

  3. JDK常用命令

    转自:https://www.cnblogs.com/saiQsai/p/10353044.html 1.jps 查看java进程,得到进程ID:7854 作用等同于:ps -ef | grep ja ...

  4. JDK常用工具集——jps

    该命令的作用是罗列出目标系统(target system)中所有具有访问权限到的Java进程. 一.命令简介:     jps [option] [hostid] 二.参数说明:     option ...

  5. JDK 常用命令

    一) 引言:    当我们安装完JDK时,除了必须的编译运行以外,它就已经自带了很多辅助工具.正所谓“工欲善其事,必先利其器.”如果能用好这些工具,它们将大大方便你的开发.它们的实用和方便有时甚至会使 ...

  6. JDK常用命令(三)jmap

    jmap jmap,Java Memory Map.主要用于打印指定Java进程(或核心文件.远程调试服务器)的共享对象内存映射或堆内存细节. jmap命令可以获得运行中的jvm的堆的快照,从而可以离 ...

  7. JDK常用命令(二)jstack

    Dump Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到dump文件中.Dump文件一般用来给驱动程序编写人员调试驱动程序用的,在java中用来分析正在运行的程序在内存中的堆栈信息 ...

  8. JDK常用命令行工具使用

  9. jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

    文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎 ...

随机推荐

  1. Java Selenium - 几种对话框处理Alert\confirm\prompt

    1. Alert , 先用常规办法定位到能触发alert的按钮 , 然后 Alert alert = driver.switchTo().alert(); alert.accept(); 如果aler ...

  2. android studio 编译sdk版降低报错解决方法

    解决办法如下: 步骤1:在gradle中修改 compile sdk 版本,比如 8. 步骤2:在gradle中删除v7包的依赖 步骤3:在manifest中修改theme,supportsRtl.t ...

  3. python模拟艺龙网登录带验证码输入

    1.使用urllib与urllib2包 2.使用cookielib自动管理cookie 3.360浏览器F12抓信息 登录请求地址和验证码地址都拿到了如图 # -*- coding: utf-8 -* ...

  4. jQuery-手风琴伸缩效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. arm-cache coherency

    提高一个系统的performance,有两种办法: 1) 不断提高一个core的performance,手段就是不断提高freq,减小Vt,这样都会在增加power(dynamic,leakage) ...

  6. 学习笔记<1>技术体系结构

    Android的系统架构采用了分层架构的思想,如上图所示.从上层到底层共包括四层,分别是   1.应用程序程序层   2.应用框架层   3.系统库和Android运行时 4.Linux内核.   每 ...

  7. meta twitter 属性

    总结下国际范儿的meta标签 <meta name="A game made to inspire developers to use GSAP, ES6 and Flexbox&qu ...

  8. php实现多进程

    转:http://www.jb51.net/article/71238.htm cd php-version/ext/pcntl phpize ./configure && make ...

  9. Java多线程-----Thread常用方法

    1.public Thread(Runnable target,String name) 创建一个有名称的线程对象 package com.thread.mothed; public class Th ...

  10. Nginx技术研究系列1-通过应用场景看Nginx的反向代理

    随着我们业务规模的不断增长,整个系统规模由两年前的几十台服务器,井喷到现在2个数据中心,接近400台服务器,上百个WebApi站点,上百个域名. 这么多的WebApi站点这么多的域名,管理和维护成本很 ...