java分析工具
- jinfo
- jstat
- jmap
- jstack
- -flag
查看某个jvm参数 - -flag +/-
动态开启或关闭部分jvm参数 - -flag name=value 修改部分jvm参数
- flags 查看所有jvm参数
- -sysprops 查看系统参数(System.getProperties())
文章图片
jvm参数 ②flag +/-
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
参数 | 解释 |
---|---|
loaded | 已加载的类数量 |
Bytes | 所占空间大小 |
Unloaded | 已卸载的类数量 |
Bytes | 已卸载类的空间大小 |
Time | 装载类卸载类话费时间 |
文章图片
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总消耗时间 |
文章图片
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次数 |
文章图片
image.png
参数 | 说明 |
---|---|
S0C | 第一个survivor大小 |
S1C | 第二个survivor大小 |
S0U | 第一个survivor已使用大小 |
S1U | 第二个survivor已使用大小 |
TT | 对象在新生代存活的次数??? |
MTT | 对象在新生代存活的最大次数 |
DSS | 期望的survivor大小??? |
EC | Eden大小 |
EU | Eden已使用大小 |
YGC | 新生代gc次数 |
TGCT | 新生代GC消耗时间 |
文章图片
image.png
参数 | 说明 |
---|---|
NGCMN | 年轻代最小容量 |
NGCMX | 年轻嗲最大容量 |
NGC | 当前年轻代大小 |
S0CMX | survivor1最大容量 |
S0C | 当前survivor1大小 |
S1CMX | survivor2最大容量 |
S1C | 当前survivor2大小 |
ECMX | Eden最大容量 |
EC | 当前Eden大小 |
YGC | 年轻代GC次数 |
FGC | 老年代GC次数 |
文章图片
image.png
参数 | 说明 |
---|---|
MC | 方法区(metaspace)大小 |
MU | metaspace已使用大小 |
CCSC | 压缩类空间大小 |
CCSU | 压缩类空间已使用大小 |
OC | 老年代大小 |
OU | 老年代已使用大小 |
YGC | 年轻代GC次数 |
FGC | 老年代GC次数 |
FGCT | 老年代GC消耗时间 |
GCT | GC消耗总时间 |
文章图片
image.png
参数 | 说明 |
---|---|
OGCMN | 老年代最小容量 |
OGCMX | 老年代最大容量 |
OGC | 当前老年代大小 |
OC | 老年代大小 |
YGC | 年轻代次数 |
FGC | 老年代GC次数 |
FGCT | 老年代GC消耗时间 |
GCT | GC总消耗时间 |
文章图片
image.png
参数 | 说明 |
---|---|
MCMN | metaspace最小容量 |
MCMX | metaspace最大容量 |
MC | 当前metaspace大小 |
CCSMN | 压缩类空间最小容量 |
CCSMX | 压缩类空间最大容量 |
CCSC | 当前压缩类空间大小 |
YGC | 年轻代GC次数 |
FGC | 老年代GC次数 |
GCT | GC总消耗时间 |
文章图片
image.png
参数 | 说明 |
---|---|
S0 | survivor1使用比率 |
S1 | survivor2使用比率 |
E | Eden使用占Eden总容量的百分比 |
O | 老年代使用比率 |
M | metaspace使用比率 |
CCSC | 压缩类空间使用比率 |
YGC | 年轻代gc次数 |
YGCT | 年轻代GC消耗时间 |
FGC | 老年代GC次数 |
FGCT | 老年代GC消耗时间 |
GCT | GC消耗总时间 |
文章图片
image.png
参数 | 说明 |
---|---|
LGCC | 最后一次发生GC的原因 |
GCC | NoGC(当前没有发生GC) |
文章图片
image.png
参数 | 说明 |
---|---|
Compoled | 编译任务执行数量 |
Failed | 编译任务执行失败的数量 |
Invalid | 编译任务执行失效的数量 |
Time | 编译任务消耗时间 |
FailedType | 最后一个编译任务失败的类型 |
FailedMethod | 最后一个编译任务失败 所在的类及方法 |
文章图片
image.png
参数 | 说明 |
---|---|
Compiled | 编译任务执行数量 |
Size | 方法生成的字节码大小 |
Type | 编译类型 |
Method | 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的 |
文章图片
image.png
【java分析工具】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