在jdk的bin目录下有跟多的 *.exe命令行工具,这些工具非常强大可以监控虚拟机和故障处理。
工具名称 | 作用描述 |
jps | JVM进程状态工具(JVM Process Status Tool)用于显示目标系统上JVM的java进程 |
jstat | JVM统计监测工具(JVM Statistics Monitoring Tool)主要用于监测显示JVM的性能统计信息 |
jinfo | java配置信息工具(JAVA Configuration Information)用于打印指定java进程核心文件或者远程调用服务的配置信息 |
jhat | java堆分析工具(JAVA Heap Analysis Tool)用于分析java堆内存中的对象信息 |
jmap | java内存映射工具(JAVA Memory Map)主要用于打印java进程,核心文件或者远程调用服务器的共享对象内存映射或者堆内存细节 |
jstack | java堆栈跟踪工具,主要用于打印指定java进程,核心文件或者远程调用服务器的java线程的堆栈跟踪信息 |
jmc | java任务控制工具(JAVAMission Control) 主要用于JVM的生产时间监测,分析诊断 |
jvisualvm | jvm 监测,故障排除,分析工具,主要以图形化界面的方式提供运行与指定虚拟机的java应用程序的详细信息 |
jconsole | 图形化用户界面监测工具,主要用于监测并显示运行与java平台上的应用程序的性能和资源占用等信息 |
1.1 jps 虚拟机进程状况工具
功能:显示正在运行的虚拟机进程
参数:-mlvV
1.2 jinfo
功能:显示jvm运行的参数
参数:
1.2 jstat 运行状态信息
功能:显示本地或远程虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行数据,是定位虚拟机性能问题的首选工具
用法: jstat [-命令选项] [vmid] [间隔时间-毫秒] [查询次数]
命令选项 | 描述 |
-class | 监视类装载、卸载数量、总空间以及耗费的时间 |
-compiler | 输出JIT编译过的方法数量耗时等 |
-gc | 垃圾回收堆的行为统计,常用命令 |
-gccapacity | 同-gc,还会输出Java堆各区域使用到的最大、最小空间 |
-gcutil | 同-gc,输出的是已使用空间占总空间的百分比 |
-gccause | 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因 |
-gcnew | 统计新生代行为 |
-gcnewcapacity | 新生代与其相应的内存空间的统计 |
-gcold | 统计老年代行为 |
-gcoldcapacity | 老年代与其相应的内存空间的统计 |
-gcpermcapacity | 永久代与其相应内存空间的统计 |
-printcompilation | hotspot编译方法统计 |
jdk1.7 使用 -gc打印的结果:
jstat.exe -gc 12488 1000 10
S0C |
survivor0区的总容量 |
MU |
方法区使用大小(JDK1.8) |
S1C |
survivor1区的总容量 |
CCSC |
压缩类空间大小 |
S0U |
survivor0区已使用的容量 |
CCSU |
压缩类空间使用大小 |
S1C |
survivor1区已使用的容量 |
PC |
当前perm的容量 (KB)(JDK1.7) |
EC |
Eden区的总容量 |
PU |
perm的使用 (KB)(JDK1.7) |
EU |
Eden区已使用的容量 |
YGC |
新生代垃圾回收次数 |
OC |
Old区的总容量 |
YGCT |
新生代垃圾回收时间 |
OU |
Old区已使用的容量 |
FGC |
老年代垃圾回收次数 |
MC | 法区大小(JDK1.8) | FGCT |
老年代垃圾回收时间 |
GCT |
垃圾回收总消耗时间 |
jdk1.8把PC PU 永久代换为了meteSpace 元空间
jstat.exe -gcnew 12488 1000 10
S0C | S1C | S0U | S1U | TT | MTT | DSS | EC | EU | YGC | YGCT |
第一个幸存区大小 |
第二个幸存区的大小 | 第一个幸存区的使用大小 | 第二个幸存区的使用大小 | 对象在新生代存活的次数Tenuring threshold(提升阈值) | 对象在新生代存活的最大次数,最大的tenuring threshold | 期望的幸存区大小,survivor区域大小 (KB) | 伊甸园区的大小 | 伊甸园区的使用大小 | 年轻代垃圾回收次数 | 年轻代垃圾回收消耗时间 |
1.2 jmap 内存dump信息
分析堆
功能:用于生成heap dump 文件,如果不使用这个命令 还可以使用 -XX:HeapDumpOnOutMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件,jmap不仅能生成dump文件,还可以查询finalize执行队列,java堆,和永久代的详细信息,如当前使用率,当前使用的那种收集器
用法:jmap [-命令选项] [vmid]
Memory Analyzer Tool = MAT (分析hprof)http://www.eclipse.org/mat/downloads.php
- Attach Listener:负责接收外部命令
- Single Dispactcher:接收命令收分发给不同的模块
- Finalizer:执行用户finalizer方法的线程
- Reference Handler:处理对象引用(软引用/弱引用/虚引用)
1.3 jstack 堆栈跟踪工具
功能:用于生成虚拟机当前时刻的线程快照,以便可以进一步定位线程出现长时间停顿的原因。如线程死锁,死循环,请求外部资源长时间等待等
用法: jstack [-命令选项] [vmid]
cpu满了,死循环堆cpu消耗很高
1.4 jvisualvm jconsole工具
升级版
由于 jconsole jvisualvm 相对来说很繁琐,甚至官方操作手册都长达几十页;后续想好会补充
jvisualvm插件地址:https://visualvm.github.io/index.html
根据自己的JDK版本下载相应版本的插件