java分析工具
- jinfo
- jstat
- jmap
- jstack
1.jinfo
查看java进程的扩展参数
- -flag <name> 查看某个jvm参数
- -flag +/- <name> 动态开启或关闭部分jvm参数
- -flag name=value 修改部分jvm参数
- flags 查看所有jvm参数
- -sysprops 查看系统参数(System.getProperties())
①-flag <name> 查看某个jvm参数
jvm参数
②flag +/- <name> 动态开启或关闭部分jvm参数
查看可关闭或开启的jvm参数
java -XX:+PrintFlagsFinal -version|grep manageable
image.png
关闭某个进程的GC日志
image.png
③ -flag name=value 修改部分jvm参数
image.png
④flags 查看所有jvm参数
image.png
sysprops 查看系统参数
image.png
2. jstat (Java Virtual Machine statistics monitoring tool)虚拟机统计监控工具
查看堆内存各部分使用量,加载类的数量
jstat
option: 参数选项
-t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h: 可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
vmid: Virtual Machine ID( 进程的 pid)
interval: 执行每次的间隔时间,单位为毫秒
count: 用于指定输出多少次记录,缺省则会一直打印
image.png
| options | 说明 |
|---|---|
| -class | 显示类加载相关信息 |
| -gc | 垃圾回收统计 |
| -gccapacity | 堆内存统计 |
| -gcnew | 新生代垃圾回收统计 |
| -gcnewcapacity | 新生代内存统计 |
| -gcold | 老年代垃圾回收统计 |
| -gcoldcapacity | 老年代内存统计 |
| -gcmetacapacity | 元数据空间统计 |
| -gcutil | 显示垃圾收集信息 |
| -gccause | 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因 |
| -compiler | 显示JIT编译相关信息 |
| -printcompilation | 输出JIT编译的方法信息 |
① -class 类加载统计
-class
| 参数 | 解释 |
|---|---|
| loaded | 已加载的类数量 |
| Bytes | 所占空间大小 |
| Unloaded | 已卸载的类数量 |
| Bytes | 已卸载类的空间大小 |
| Time | 装载类卸载类话费时间 |
② -gc垃圾回收统计
image.png
| 参数 | 解释 |
|---|---|
| S0C | 年轻代中第一个survivor的大小(字节) |
| S1C | 第二个survivor大小 |
| S0U | 第一个survivor已使用大小 |
| S1U | 第二个survivor已使用大小 |
| EC | Eden总大小 |
| EU | Eden已使用大小 |
| OC | 老年代大小 |
| OU | 老年代已使用大小 |
| MC | metaspace(元数据空间)大小 |
| MU | 元数据已使用大小 |
| CCSC | 压缩类空间大小 |
| CCSU | 压缩类已使用空间大小 |
| YGC | 年轻代GC次数 |
| YGCT | 年轻代GC消耗时间(s) |
| FGC | 老年代GC次数 |
| FGCT | 老年代GC消耗时间 |
| GCT | GC总消耗时间 |
③-gccapacity 堆内存统计
image.png
| 参数 | 说明 |
|---|---|
| NGCMN | 新生代最小容量 |
| NGCMX | 新生代最大容量 |
| NGC | 当前新生代容量 |
| S0C | 第一个survivor大小 |
| S1C | 第二个survivor大小 |
| EC | Eden大小 |
| OGCMN | 老年代最小容量 |
| OGCMX | 老年代最大容量 |
| OGC | 老年代当前容量 |
| OC | 老年代容量 |
| MCMN | metaspace最小容量 |
| MCMX | metaspace最大容量 |
| MC | metaspace当前大小 |
| CCSMN | 压缩类空间最小容量 |
| CCSMX | 压缩类空间最大容量 |
| CCSC | 压缩类空间当前大小 |
| YGC | 新生代gc次数 |
| FGC | 老年代gc次数 |
④-gcnew 新生代gc统计
image.png
| 参数 | 说明 |
|---|---|
| S0C | 第一个survivor大小 |
| S1C | 第二个survivor大小 |
| S0U | 第一个survivor已使用大小 |
| S1U | 第二个survivor已使用大小 |
| TT | 对象在新生代存活的次数??? |
| MTT | 对象在新生代存活的最大次数 |
| DSS | 期望的survivor大小??? |
| EC | Eden大小 |
| EU | Eden已使用大小 |
| YGC | 新生代gc次数 |
| TGCT | 新生代GC消耗时间 |
⑤-gcnewcapacity 新生代内存统计
image.png
| 参数 | 说明 |
|---|---|
| NGCMN | 年轻代最小容量 |
| NGCMX | 年轻嗲最大容量 |
| NGC | 当前年轻代大小 |
| S0CMX | survivor1最大容量 |
| S0C | 当前survivor1大小 |
| S1CMX | survivor2最大容量 |
| S1C | 当前survivor2大小 |
| ECMX | Eden最大容量 |
| EC | 当前Eden大小 |
| YGC | 年轻代GC次数 |
| FGC | 老年代GC次数 |
⑥-gcold 老年代gc统计
image.png
| 参数 | 说明 |
|---|---|
| MC | 方法区(metaspace)大小 |
| MU | metaspace已使用大小 |
| CCSC | 压缩类空间大小 |
| CCSU | 压缩类空间已使用大小 |
| OC | 老年代大小 |
| OU | 老年代已使用大小 |
| YGC | 年轻代GC次数 |
| FGC | 老年代GC次数 |
| FGCT | 老年代GC消耗时间 |
| GCT | GC消耗总时间 |
⑦-gcoldcapacity 老年代内存统计
image.png
| 参数 | 说明 |
|---|---|
| OGCMN | 老年代最小容量 |
| OGCMX | 老年代最大容量 |
| OGC | 当前老年代大小 |
| OC | 老年代大小 |
| YGC | 年轻代次数 |
| FGC | 老年代GC次数 |
| FGCT | 老年代GC消耗时间 |
| GCT | GC总消耗时间 |
⑧-gcmetacapacity 元数据空间内存统计
image.png
| 参数 | 说明 |
|---|---|
| MCMN | metaspace最小容量 |
| MCMX | metaspace最大容量 |
| MC | 当前metaspace大小 |
| CCSMN | 压缩类空间最小容量 |
| CCSMX | 压缩类空间最大容量 |
| CCSC | 当前压缩类空间大小 |
| YGC | 年轻代GC次数 |
| FGC | 老年代GC次数 |
| GCT | GC总消耗时间 |
⑨-gcutil gc统计
image.png
| 参数 | 说明 |
|---|---|
| S0 | survivor1使用比率 |
| S1 | survivor2使用比率 |
| E | Eden使用占Eden总容量的百分比 |
| O | 老年代使用比率 |
| M | metaspace使用比率 |
| CCSC | 压缩类空间使用比率 |
| YGC | 年轻代gc次数 |
| YGCT | 年轻代GC消耗时间 |
| FGC | 老年代GC次数 |
| FGCT | 老年代GC消耗时间 |
| GCT | GC消耗总时间 |
⑩-gccause 显示gc信息,比-gcutil 多了一项 最后一次或当前发生GC的原因,
image.png
| 参数 | 说明 |
|---|---|
| LGCC | 最后一次发生GC的原因 |
| GCC | NoGC(当前没有发生GC) |
⑪ -compiler 显示JIT编译信息
image.png
| 参数 | 说明 |
|---|---|
| Compoled | 编译任务执行数量 |
| Failed | 编译任务执行失败的数量 |
| Invalid | 编译任务执行失效的数量 |
| Time | 编译任务消耗时间 |
| FailedType | 最后一个编译任务失败的类型 |
| FailedMethod | 最后一个编译任务失败 所在的类及方法 |
⑫ -printcompilation 当前vm执行信息
image.png
| 参数 | 说明 |
|---|---|
| Compiled | 编译任务执行数量 |
| Size | 方法生成的字节码大小 |
| Type | 编译类型 |
| Method | 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的 |
3.jmap 查看内存信息
①查看类实例数及占用内存大小
image.png
log.txt 文件内容如下
image.png
②堆信息
image.png
image.png
③堆内存dump
image.png
也可以设置内存溢出自动导出dump文件(内存很大的时候可能导不出来):
-XX:+HeapDumpOnOutOfMemory
-X:HeapDumpPath=./
image.png
可以用jvisualvm命令工具导入该dump文件分析
image.png
jstack 堆栈跟踪工具,生成当前时刻的线程快照
image.png
可以使用jstack进行死锁检测
死锁
image.png










网友评论