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

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


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

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

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

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

3.结果展示


二、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.效果演示


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

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

2、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编译的方法
......

3、查看类装载卸载情况 jstat -class pid

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

4、查看GC情况 jstat -gc pid

属性释义
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

5、查看GC情况,以百分比显示
jstat -gcutil pid

6、查看新生代GC情况
jstat -gcnew pid

属性释义
S0C新生代survivor0容量
S1C新生代survivor1容量
S0U新生代survivor0已使用大小
S1U新生代survivor1已使用大小
TT对象在新生代存活的次数
MTT对象在新生代存活的最大次数
DSS期望的幸存区大小
ECeden区大小
EUeden区已使用大小
YGCyoung gc次数
YGCTyoung gc 时间 (秒)

7、查看老年代GC情况
jstat -gcold pid

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

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

9、查看编译情况
jstat -compiler pid


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

1、常用用法

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

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

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


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

效果演示:会显示所有线程的各种信息,可以用来排查死锁,或线程长时间停滞的问题...


!!!

转载于:https://my.oschina.net/u/3286119/blog/1927805

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值