在JDK/bin目录下我发现了许多命令行工具

Java jar 调试工具 javajdk调试器的命令_jdk

这些命令有哪些作用呢,接下来我就来详细介绍一下

常用JDK命令行工具

命令名称

全称

用途

jstat

JVM Statistics Monitoring Tool

用于收集Hotspot虚拟机各方面的运行数据

jps

JVM Process Status Tool

显示指定系统内所有的HotSpot虚拟机进程

jinfo

Configuration Info for Java

显示虚拟机配置信息

jmap

JVM Memory Map

生成虚拟机的内存转储快照,生成heapdump文件

jhat

JVM Heap Dump Browser

用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果

jstack

JVM Stack Trace

显示虚拟机的线程快照

1. jps

(1) 定义:查看虚拟机进程信息

(2) 参数:

-q 只输出进程ID,不输出类的短名称
-m 输出传递给Java进程的函数
-l 输出主函数的完整路径
-v 显示传递给JVM的参数

(3)实例

Java jar 调试工具 javajdk调试器的命令_jvm_02

2.jinfo

(1)定义:用于查看和调整虚拟机的配置参数

(2)参数

-flag 打印指定JVM的参数值
-flag [+]-] 设置指定JVM参数的布尔值
-flag = 指定JVM参数的值

(3)实例

Java jar 调试工具 javajdk调试器的命令_Java jar 调试工具_03

Java jar 调试工具 javajdk调试器的命令_Java jar 调试工具_04

3.jstack

(1)定义:虚拟机堆栈跟踪

(2)参数

-l 打印锁信息

-m 打印Java和native 的帧信息

-F 强制dump,当jstack没有响应时使用。

(3)实例

Java jar 调试工具 javajdk调试器的命令_虚拟机_05

Java jar 调试工具 javajdk调试器的命令_jdk_06

4.jstat

(1)定义:查看虚拟机统计信息监视工具

(2)参数

-class 监视类装载,卸载数量,总空间以及类装载所耗费的时间

-gc 监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代的容量,已用空间,GC时间合计等信息

-gccapacity 内容与-gc基本相同,但主要输出Java堆各个区域的最大最小空间

-gcutil 内容与-gc基本相同,但主要关注已使用空间占总空间的百分比

-gccause 内容与-gcutil基本相同,但主要关注已使用空间占总空间的百分比,并输出导致上一次GC的原因

-gcnew 监视新生代GC情况

-gcnewcapacity 内容与-gcnew基本相同,但主要输出使用到的最大最小空间

-gcold 监视老年代GC情况

-gcoldcapacity 内容与-gcnew基本相同,但主要输出使用到的最大最小空间

-gcpermcapacity 输出永久代使用到的最大最小空间

-complier 输出JIT 编译器编译过的方法耗时的信息

-printcompliter 输出已经被JIT编译的方法

(3)实例

Java jar 调试工具 javajdk调试器的命令_jvm_07


每列的含义

  • S0C:第一个幸存区的大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间
5.jmap

(1)定义:生成Java应用程序的堆快照和对象的统计信息

(2)参数

-dump 生成Java堆转储快照,格式为: -dump:[live , ]format=b , file=,其中live子参数 说明只dump出存活的对象

-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象

-heap 显示Java堆详细信息,如使用哪种回收器,参数配置,分代状况等

-histo 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”

(3)实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMb9Tqn3-1615415603986)()]

6. jhat

(1)定义:分析虚拟机转储快照信息

(2)参数:后面接文件路径

(3)实例

Java jar 调试工具 javajdk调试器的命令_Java jar 调试工具_08

打开浏览器,输入网址:http://127.0.0.1:7000/

然后就可以看到(部分网页)

Java jar 调试工具 javajdk调试器的命令_Java jar 调试工具_09

Java jar 调试工具 javajdk调试器的命令_虚拟机_10

其他工具

当然还有几个其他工具,例如

  • 内存dump后的分析工具:MAT
  • 看Java进程的native栈:pstack
  • 日志相关工具:tail,find,fgrep,awk
  • 查看Java堆外的内存消耗:gperf

小结

  • 命令行终端
  • 标准终端类:jps、jinfo、jstat、jstack、jmap
  • 功能整合类:jcmd、vjtools、arthas、greys
  • 可视化界面
  • 简易:JConsole、JVisualvm、HA、GCHisto、GCViewer
  • 进阶:MAT、JProfiler