java分析工具

java分析工具

  • jinfo
  • jstat
  • jmap
  • jstack
1.jinfo 查看java进程的扩展参数
  • -flag 查看某个jvm参数
  • -flag +/- 动态开启或关闭部分jvm参数
  • -flag name=value 修改部分jvm参数
  • flags 查看所有jvm参数
  • -sysprops 查看系统参数(System.getProperties())
①-flag 查看某个jvm参数 java分析工具
文章图片
jvm参数 ②flag +/- 动态开启或关闭部分jvm参数 查看可关闭或开启的jvm参数
java -XX:+PrintFlagsFinal -version|grep manageable

java分析工具
文章图片
image.png
关闭某个进程的GC日志
java分析工具
文章图片
image.png
③ -flag name=value 修改部分jvm参数 java分析工具
文章图片
image.png ④flags 查看所有jvm参数 java分析工具
文章图片
image.png sysprops 查看系统参数 java分析工具
文章图片
image.png 2. jstat (Java Virtual Machine statistics monitoring tool)虚拟机统计监控工具 查看堆内存各部分使用量,加载类的数量

java分析工具
文章图片
jstat
option: 参数选项
-t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h: 可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头
vmid: Virtual Machine ID( 进程的 pid)
interval: 执行每次的间隔时间,单位为毫秒
count: 用于指定输出多少次记录,缺省则会一直打印
java分析工具
文章图片
image.png
options 说明
-class 显示类加载相关信息
-gc 垃圾回收统计
-gccapacity 堆内存统计
-gcnew 新生代垃圾回收统计
-gcnewcapacity 新生代内存统计
-gcold 老年代垃圾回收统计
-gcoldcapacity 老年代内存统计
-gcmetacapacity 元数据空间统计
-gcutil 显示垃圾收集信息
-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因
-compiler 显示JIT编译相关信息
-printcompilation 输出JIT编译的方法信息
① -class 类加载统计 java分析工具
文章图片
-class
参数 解释
loaded 已加载的类数量
Bytes 所占空间大小
Unloaded 已卸载的类数量
Bytes 已卸载类的空间大小
Time 装载类卸载类话费时间
② -gc垃圾回收统计 java分析工具
文章图片
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 堆内存统计 java分析工具
文章图片
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统计 java分析工具
文章图片
image.png
参数 说明
S0C 第一个survivor大小
S1C 第二个survivor大小
S0U 第一个survivor已使用大小
S1U 第二个survivor已使用大小
TT 对象在新生代存活的次数???
MTT 对象在新生代存活的最大次数
DSS 期望的survivor大小???
EC Eden大小
EU Eden已使用大小
YGC 新生代gc次数
TGCT 新生代GC消耗时间
⑤-gcnewcapacity 新生代内存统计 java分析工具
文章图片
image.png
参数 说明
NGCMN 年轻代最小容量
NGCMX 年轻嗲最大容量
NGC 当前年轻代大小
S0CMX survivor1最大容量
S0C 当前survivor1大小
S1CMX survivor2最大容量
S1C 当前survivor2大小
ECMX Eden最大容量
EC 当前Eden大小
YGC 年轻代GC次数
FGC 老年代GC次数
⑥-gcold 老年代gc统计 java分析工具
文章图片
image.png
参数 说明
MC 方法区(metaspace)大小
MU metaspace已使用大小
CCSC 压缩类空间大小
CCSU 压缩类空间已使用大小
OC 老年代大小
OU 老年代已使用大小
YGC 年轻代GC次数
FGC 老年代GC次数
FGCT 老年代GC消耗时间
GCT GC消耗总时间
⑦-gcoldcapacity 老年代内存统计 java分析工具
文章图片
image.png
参数 说明
OGCMN 老年代最小容量
OGCMX 老年代最大容量
OGC 当前老年代大小
OC 老年代大小
YGC 年轻代次数
FGC 老年代GC次数
FGCT 老年代GC消耗时间
GCT GC总消耗时间
⑧-gcmetacapacity 元数据空间内存统计 java分析工具
文章图片
image.png
参数 说明
MCMN metaspace最小容量
MCMX metaspace最大容量
MC 当前metaspace大小
CCSMN 压缩类空间最小容量
CCSMX 压缩类空间最大容量
CCSC 当前压缩类空间大小
YGC 年轻代GC次数
FGC 老年代GC次数
GCT GC总消耗时间
⑨-gcutil gc统计 java分析工具
文章图片
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的原因, java分析工具
文章图片
image.png
参数 说明
LGCC 最后一次发生GC的原因
GCC NoGC(当前没有发生GC)
? -compiler 显示JIT编译信息 java分析工具
文章图片
image.png
参数 说明
Compoled 编译任务执行数量
Failed 编译任务执行失败的数量
Invalid 编译任务执行失效的数量
Time 编译任务消耗时间
FailedType 最后一个编译任务失败的类型
FailedMethod 最后一个编译任务失败 所在的类及方法
? -printcompilation 当前vm执行信息 java分析工具
文章图片
image.png
参数 说明
Compiled 编译任务执行数量
Size 方法生成的字节码大小
Type 编译类型
Method 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的
3.jmap 查看内存信息 ①查看类实例数及占用内存大小 java分析工具
文章图片
image.png
【java分析工具】log.txt 文件内容如下

java分析工具
文章图片
image.png ②堆信息 java分析工具
文章图片
image.png
java分析工具
文章图片
image.png ③堆内存dump java分析工具
文章图片
image.png
也可以设置内存溢出自动导出dump文件(内存很大的时候可能导不出来):
-XX:+HeapDumpOnOutOfMemory
-X:HeapDumpPath=./

java分析工具
文章图片
image.png
可以用jvisualvm命令工具导入该dump文件分析

java分析工具
文章图片
image.png jstack 堆栈跟踪工具,生成当前时刻的线程快照 java分析工具
文章图片
image.png 可以使用jstack进行死锁检测

java分析工具
文章图片
死锁 java分析工具
文章图片
image.png

    推荐阅读