java分析工具
jinfo
jstat
jmap
jstack
1.jinfo
查看java进程的扩展参数
-flag 查看某个jvm参数
-flag +/- 动态开启或关闭部分jvm参数
-flag name=value 修改部分jvm参数
flags 查看所有jvm参数
-sysprops 查看系统参数(System.getProperties())
①-flag 查看某个jvm参数
jvm参数
②flag +/- 动态开启或关闭部分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