在JDK根目录下的bin
目录中,JDK提供了很多用于监控虚拟机的工具。
这些工具中很多都是使用lib/tools.jar来包装进行实现的。
1. 命令行工具
名称 | 全称 | 主要作用 |
---|---|---|
jps | JVM Process Status Tool | 显示指定系统内所有的HotSpot虚拟机进程 |
jstat | JVM Statistics Monitoring Tool | 用于收集HotSpot虚拟机各方面的运行数据 |
jinfo | JAVA Configuration Info | 显示虚拟机配置信息 |
jmap | JAVA Memory Map | 生成虚拟机内存转储快照(heapdump文件) |
jhat | JAVA Heap Dump Browser | 用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果 |
jstack | JAVA Stack Trace | 显示虚拟机的线程快照 |
1.1. jps:虚拟机进程状况工具
jps [otpions] [hostid]
该工具用于查看主机上正在运行的java进程,类似于linux中的ps命令。
jps可以通过RMI协议查看远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。
选项 | 作用 |
---|---|
-q | 只输出LVMID,省略主类名称 |
-m | 输出虚拟机进程启动时传递给main方法的参数 |
-l | 输出住类的全名,如果进程执行的是jar包,输出jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
1.2. jstat:虚拟机统计信息监视工具
jstat [option vmid [interval[s|ms] [count]] ]
interval count 分别代表查询间隔和次数,如果省略默认查询一次。
vmid:如果是本地虚拟机进程,那么vmid就是 vm进程id。如果是远程虚拟机进程,那么格式是:
[protocol:][//]lvmid[@hostname[:port]/servername]
选项 | 作用 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视java堆状况,包括Eden区,两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但会额外输出导致上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间 |
-gcold | 监视老年代GC状况 |
-gcoldcapacity | 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间 |
-gcpermcapacity | 输出永久代使用到的最大最小空间 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息。 |
-printcompilation | 输出已经被JIT编译的方法 |
垃圾回收统计结果选项说明:
结果 | 说明 |
---|---|
S0C | 第一个幸存区的大小 |
S1C | 第二个幸存区的大小 |
S0U | 第一个幸存区的使用大小 |
S1U | 第二个幸存区的使用大小 |
EC | 伊甸园区的大小 |
EU | 伊甸园区的使用大小 |
OC | 老年代大小 |
OU | 老年代使用大小 |
MC | 方法区大小 |
MU | 方法区使用大小 |
CCSC | 压缩类空间大小 |
CCSU | 压缩类空间使用大小 |
YGC | 年轻代垃圾回收次数 |
YGCT | 年轻代垃圾回收消耗时间 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收消耗时间 |
GCT | 垃圾回收消耗总时间 |
类加载统计结果选项说明:
结果 | 说明 |
---|---|
Loaded | 加载class的数量 |
Bytes | 所占用空间大小 |
Unloaded | 未加载数量 |
Bytes | 未加载占用空间 |
Time | 时间 |
编译统计结果选项说明:
结果 | 说明 |
---|---|
Compiled | 编译数量 |
Failed | 失败数量 |
Invalid | 不可用数量 |
Time | 时间 |
FailedType | 失败类型 |
FailedMethod | 失败的方法 |
堆内存统计结果选项说明:
结果 | 说明 |
---|---|
NGCMN | 编译数量 |
NGCMX | 失败数量 |
NGC | 不可用数量 |
S0C | 时间 |
S1C | 失败类型 |
EC | 失败的方法 |
OGCMN | 老年代最小容量 |
OGCMX | 老年代最大容量 |
OGC | 当前老年代大小 |
OC | 当前老年代大小 |
MCMN | 最小元数据容量 |
MCMX | 最大元数据容量 |
MC | 当前元数据空间大小 |
CCSMN | 最小压缩类空间大小 |
CCSMX | 最大压缩类空间大小 |
CCSC | 当前压缩类空间大小 |
YGC | 年轻代gc次数 |
FGC | 老年代GC次数 |
新生代垃圾回收统计结果选项说明:
结果 | 说明 |
---|---|
S0C | 第一个幸存区大小 |
S1C | 第二个幸存区的大小 |
S0U | 第一个幸存区的使用大小 |
S1U | 第二个幸存区的使用大小 |
TT | 对象在新生代存活的次数 |
MTT | 对象在新生代存活的最大次数 |
DSS | 期望的幸存区大小 |
EC | 伊甸园区的大小 |
EU | 伊甸园区的使用大小 |
YGC | 年轻代垃圾回收次数 |
YGCT | 年轻代垃圾回收消耗时间 |
老年代垃圾回收统计结果选项说明:
结果 | 说明 |
---|---|
MC | 方法区大小 |
MU | 方法区使用大小 |
CCSC | 压缩类空间大小 |
CCSU | 压缩类空间使用大小 |
OC | 老年代大小 |
OU | 老年代使用大小 |
YGC | 年轻代垃圾回收次数 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收消耗时间 |
GCT | 垃圾回收消耗总时间 |
老年代内存统计结果选项说明:
结果 | 说明 |
---|---|
OGCMN | 老年代最小容量 |
OGCMX | 老年代最大容量 |
OGC | 当前老年代大小 |
OC | 老年代大小 |
YGC | 年轻代垃圾回收次数 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收消耗时间 |
GCT | 垃圾回收消耗总时间 |
元数据空间统计结果选项说明:
结果 | 说明 |
---|---|
MCMN | 最小元数据容量 |
MCMX | 最大元数据容量 |
MC | 当前元数据空间大小 |
CCSMN | 最小压缩类空间大小 |
CCSMX | 最大压缩类空间大小 |
CCSC | 当前压缩类空间大小 |
YGC | 年轻代垃圾回收次数 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收消耗时间 |
GCT | 垃圾回收消耗总时间 |
总结垃圾回收统计结果选项说明:
结果 | 说明 |
---|---|
S0 | 幸存1区当前使用比例 |
S1 | 幸存2区当前使用比例 |
E | 伊甸园区使用比例 |
O | 老年代使用比例 |
M | 元数据区使用比例 |
CCS | 压缩使用比例 |
YGC | 年轻代垃圾回收次数 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收消耗时间 |
GCT | 垃圾回收消耗总时间 |
JVM编译方法统计结果选项说明:
结果 | 说明 |
---|---|
Compiled | 最近编译方法的数量 |
Size | 最近编译方法的字节码数量 |
Type | 最近编译方法的编译类型 |
Method | 方法名标识 |
1.3. jinfo JAVA配置信息工具
jinfo [option] pid
它可以实时查看和调整虚拟机各种参数
1.4. jmap JAVA内存映像工具
jmap [option] vmid
该命令用于生成堆转储快照。
选项 | 作用 |
---|---|
-dump | 生成java堆转储快照,格式为-dump:[live, ]fromat=b,file= |
-finalizerinfo | 显示在F-Queue中等待Finalizer线程执行finalize方法的对象, 仅Linux/Solaris平台有效 |
-heap | 显示java堆详细信息,如使用那种回收器,参数配置,分代状况等,仅Linux/Solaris平台有效 |
-histo | 显示堆中对象统计信息,包括类、实例数量、合计容量 |
-permstat | 以ClassLoader为统计口径显示永久代内存状态,仅Linux/Solaris平台有效 |
-F | 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照,仅Linux/Solaris平台有效 |
jmap -dump:format=b,firle=eclipse.bin 3500
1.5. jhat 虚拟机堆转储快照分析工具
不建议使用,因为效率和资源占用问题,特别不推荐在生产环境使用。
jhat <dumpFile>
该命令会启动一个web服务,需要通过浏览器访问。
1.6. jstack java堆栈跟踪工具
jstack [option] vmid
该命令用于生成虚拟机当前时刻的线程快照。
选项 | 作用 |
---|---|
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 除堆栈外,显示关于锁的附加信息 |
-m | 如果调用本地方法的话,可以显示C/C++的堆栈 |
2. JDK可视化工具
2.1. JConsole Java监视与管理控制台
JConsole是一种基于JMX的可视化监视、管理工具。
2.2. VisualVM 多合一故障处理工具
打开界面 干就完了