给系统定位问题的时候,知识经验是基础,应用数据是依据,工具是手段,在jvm中,咱们常见的数据包括: 运行日志、堆栈信息、GC信息、线程快照(threaddump/javacode)、堆快照(heapdump/hporf),jdk提供给咱们了很实用的工具来分析,定位解决这些问题,这些工具包含于jdk中,而且以java实现,方便在不一样的环境中不用安装其余依赖库便可使用,非常方便。下面分别介绍 jps、jinfo、jstat、jstack、jmap,本文使用的jdk版本为 HopSpot1.8.0_11java
配置项 | 做用 |
---|---|
-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
1.经常使用用法函数
jinfo pid
: 显示jvm系统属性与vm参数信息jinfo -flags pid
: 显示jvm vm参数信息,如最大最小堆,默认堆,垃圾收集器参数等jinfo -sysprops pid
: 显示jvm系统属性jinfo -flag
: 显示特定vm参数值,例如 jinfo -flag MaxHeapSize pid
输出pid的最大堆内存2.效果演示工具
一、语法格式
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 pid
code
属性 | 释义 |
---|---|
Loaded | 装载总数量 |
Bytes | 装载总大小 |
Unloaded | 卸载类的数量 |
Bytes | 卸载总大小 |
Time | 加载和卸载类总共的耗时 |
四、查看GC状况 jstat -gc pid
orm
属性 | 释义 |
---|---|
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
一、经常使用用法
jmap -heap pid
查看当前jvm heapdump与垃圾收集器的使用状况
jmap -dump:format=b,file=/temp/filename.hprof pid
转储堆快照,生成hprof文件到指定路径
jmap -histo pid
列出当前heap中对象情况,附字节码与java对象映射表
效果演示:会显示全部线程的各类信息,能够用来排查死锁,或线程长时间停滞的问题...
!!!