jvm-jps、jinfo、jstat、jstack、jmap 基本使用

给系统定位问题的时候,知识经验是基础,应用数据是依据,工具是手段,在jvm中,咱们常见的数据包括: 运行日志、堆栈信息、GC信息、线程快照(threaddump/javacode)、堆快照(heapdump/hporf),jdk提供给咱们了很实用的工具来分析,定位解决这些问题,这些工具包含于jdk中,而且以java实现,方便在不一样的环境中不用安装其余依赖库便可使用,非常方便。下面分别介绍 jps、jinfo、jstat、jstack、jmap,本文使用的jdk版本为 HopSpot1.8.0_11java


1、jps ( jvm process status tool ) 虚拟机进程工具

配置项 做用
-q 忽略主类的名称,只输出pid
-m 输出启动类main函数的参数
-l 输出主类名,若是进程执行的为jar,则输出jar路径
-v 输出具体进程启动时jvm参数

1.命名格式
jps [options] pid
2.经常使用方式tomcat

  • jps -lv : 输出启动类名与启动时jvm参数,能够方便的看到各个tomcat的自定义参数配置
  • jps -lv |grep project_name : 在上述基础上过滤出本身想要查看的项目的信息

3.结果展现jvm


2、jinfo ( configuration info for java ) 显示虚拟机配置信息

1.经常使用用法函数

  • jinfo pid : 显示jvm系统属性与vm参数信息
  • jinfo -flags pid : 显示jvm vm参数信息,如最大最小堆,默认堆,垃圾收集器参数等
  • jinfo -sysprops pid : 显示jvm系统属性
  • jinfo -flag : 显示特定vm参数值,例如 jinfo -flag MaxHeapSize pid 输出pid的最大堆内存

2.效果演示工具


3、jstat ( jvm statistics monitoring tool) 收集虚拟机各方面运行数据

一、语法格式
jstat [ option pid [interval[s|ms] [count]]]
说明: interval 表示循环时间间隔,默认单位为ms,能够在直接使用s/ms指定单位,如 60ms/1s, count 表示输出几回 例:
jstat gc pid 1s 20 : 每1s查询一次gc状况,查询20次 线程

二、option 详解(主要分三类:类装载、垃圾收集、运行期编译情况)日志

配置项 做用
-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc 监视Java堆,包括Eden区、两survivor区、老年代、永久代等的容量、已用空间、GC时间合计等
-gccapacity 与-gc基本相同,但关注点为Java堆各个区域使用到的最大、最小空间
-gcutil 与-gc基本相同,但关注点为Java堆各个区域已使用空间占总空间的百分比
-gccause 与-gcutil功能相同,但会额外输出致使上一次GC产生的缘由
-gcnew 监控新生代GC状况
-gcnewcapacity 与-gcnew基本相同,但关注最大,最小空间
-gold 监控老年代GC状况
-goldcapacity 与-gcold基本相同,但关注最大,最小空间
-compiler 输出被JIT编译过的方法、耗时等信息
-printcomplilation 输出已经被JIT编译的方法
... ...

三、查看类装载卸载状况 jstat -class pidcode

属性 释义
Loaded 装载总数量
Bytes 装载总大小
Unloaded 卸载类的数量
Bytes 卸载总大小
Time 加载和卸载类总共的耗时

四、查看GC状况 jstat -gc pidorm

属性 释义
S0C 新生代survivor0容量
S1C 新生代survivor1容量
S0U 新生代survivor0已使用大小
S1U 新生代survivor1已使用大小
EC 新生代eden区容量
EU 新生代eden区已使用大小
OC 老年代容量
OU 老年代已使用大小
MC 元数据容量,即方法区容量
MU 元数据已使用空间
CCSC 压缩类空间大小
CCSU 压缩类空间使用大小
YGC 新生代gc次数(young gc)
YGCT 新生代gc时间(s)
FGC 老生代gc次数(full gc)
GCT 总的gc时间,包括young gc和full gc

五、查看GC状况,以百分比显示
jstat -gcutil pid
对象

六、查看新生代GC状况
jstat -gcnew pid

属性 释义
S0C 新生代survivor0容量
S1C 新生代survivor1容量
S0U 新生代survivor0已使用大小
S1U 新生代survivor1已使用大小
TT 对象在新生代存活的次数
MTT 对象在新生代存活的最大次数
DSS 指望的幸存区大小
EC eden区大小
EU eden区已使用大小
YGC young gc次数
YGCT young gc 时间 (秒)

七、查看老年代GC状况
jstat -gcold pid

八、查看各空间容量
jstat -gccapacity pid

属性 释义
NGCMN 新生代最小容量
NGCMX 新生代最大容量
NGC 当前新生代容量
S0C survivor0大小
S1C survivor0大小
EC EDEN区大小
OGCMN 老年代最小容量
OGCMX 老年代最大容量
OGC 当前老年代大小
MCMN 元数据最小容量
MCMX 元数据最大容量
CCSMN 最小压缩类空间大小
CCSMX 最大压缩类空间大小
CCSC 当前压缩类空间大小)

九、查看编译状况
jstat -compiler pid


4、jmap ( memory map for java ) 虚拟机堆快照工具

一、经常使用用法

  • jmap -heap pid 查看当前jvm heapdump与垃圾收集器的使用状况

  • jmap -dump:format=b,file=/temp/filename.hprof pid 转储堆快照,生成hprof文件到指定路径

  • jmap -histo pid 列出当前heap中对象情况,附字节码与java对象映射表


5、jstack ( stack trace for java ) 虚拟机线程快照工具

效果演示:会显示全部线程的各类信息,能够用来排查死锁,或线程长时间停滞的问题...


!!!

相关文章
相关标签/搜索