在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 多合一故障处理工具
打开界面 干就完了
本文详细介绍JDK提供的各类监控工具,包括jps、jstat、jinfo、jmap、jhat、jstack,以及JConsole和VisualVM等可视化工具。这些工具用于监控虚拟机状态、分析内存使用、获取线程快照等。
322

被折叠的 条评论
为什么被折叠?



