JVM—命令(jps,jstat,jmap,jstack)

一般用于tomcat异常场景使用:

OOM, 线程死锁(lock dead),锁争用(lock contention),java消耗过多cpu等

一般使用分析命令有:

jps #查看运行java进程
jstat -gc PID #查看进程PID新生代老年代内存使用情况,年轻老年代垃圾回收次数以及时间
jstat -gccause PID #查看进程垃圾收集原因
jmap -heap PID #查看进程堆内存具体使用情况
jstack -l PID #查看线程信息,用于分析线程争取,死锁造成tomcat假死情况 

1. jps (JVM Process Status Tool)显示指定系统所有的HotSpot虚拟机进程

命令格式 jps [options] [hostid]
options参数 描述
-l 输出主类全名或jar路径
-p 只输出LVMID(本地虚拟机进程ID)
-m 输出JVM启动时传递给main()的参数
-v 输出jvm启动时显示指定的jvm参数

 

 

 

 

2. jstat (JVM statistics Monitoring) 用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行数据

命令格式 jstat [option] LVMID [interval] [count]    :interval 连续输出的时间间隔,count 连续输出次数
option参数 描述
class class loader的行为统计
compiler HotSpt JIT编译器行为统计
gc 垃圾回收堆的行为统计
gccapacity 各个垃圾回收代容量(young,old,perm)和他们相对应的空间统计
gcutil 垃圾回收统计概述
gccause 垃圾收集统计概述-同gcutil ,附加最后两次垃圾回收时间的原因
gcnew 新生代行为统计
gcnewcapacity 新生代与其相应的空间内存的统计
gcold 老年代和永生代行为统计
gcoldcapacity 老年代与其相应的空间内存的统计
gcpermcapacity 永生代与其相应的空间内存统计
printcompilation HotSpot编译方法统计

 

 

 

 

 

 

 

 

 

    2.1 -class 监控类装载,卸载数量,总空间以及消耗时间

 jstat -class 5280
 Loaded  Bytes  Unloaded  Bytes     Time   
 15982 31281.3      664  1118.1      39.24

Loaded: 加载class的数量

Bytes: class字节大小

Unloaded:未加载class的数量

Bytes: 未加载class的字节大小

Time:加载时间

    2.2 -compiler 输出JIT编译过的方法数量,耗时等,

 jstat -compiler 5280
 Compiled Failed Invalid   Time   FailedType FailedMethod
   25611      0       0   195.27          0             

Compiled-编译数量;Failed-编译失败数量;Invalid-无效数量;Time-编译耗时;FailedType-失败类型;FailedMethod-失败方法的全限定名。

    2.3 -gc 垃圾回收堆的行为统计(C-总容量;U-使用容量)

jstat -gc 5280
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
3584.0 1024.0  0.0   730.0  212480.0 79814.8   273408.0   201376.5  106456.0 94237.2 13272.0 10362.5   2399   26.589   7     28.622   55.211

     S0C,S1C:表示第一个和第二个生存区的容量
     S0U,S1U:表示第一个和第二个生存区的已使用的容量
     EC,EU:表示eden区域的容量和已用量
     OC,OU:表示老年代区的容量和已用量
     PC,PU:表示持久代的内存容量和已用量
     YGC,YGT:表示新生代的GC发生的次数和耗时
     FGCT,FGCT:表示老年代Full GC发生的次数和耗时
     GCT:表示总的GC耗时

     2.4 -gccapacity 和-gc相同,同时输出java堆各区域使用的最大,最小空间;

jstat -gccapacity 2654
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
 41984.0 672256.0 239104.0  512.0 4096.0  97792.0    84992.0  1345024.0   162304.0   162304.0      0.0 1355776.0 352640.0      0.0 1048576.0  45696.0 161368  1471

NGCMN、NGCMX:新生代占用的最小,最大空间

OGCMN、OGCMX:老年代占用的最大最小空间

OGC、OC:当前代老年代的容量

PGCMN、PGCMX:perm占用的最小,最大空间

    2.5 -gcutil 和-gc一样,只是输出的是已经使用的空间占总空间的百分比

jstat -gcutil 2654
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 53.12   0.00  17.48  86.80  59.93  68.68 161376 3205.345  1471 1049.639 4254.984

    2.6 -gccause 垃圾收集统计概述,和-gcutil一样,增加了最近两次垃圾回收事件的原因

jstat -gccause 2654
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
 53.12   0.00  27.30  86.80  59.93  68.68 161376 3205.345  1471 1049.639 4254.984 Allocation Failure   No GC

LGCC:最近垃圾回收的原因,GCC:当前垃圾回收的原因

    2.7 -gcnew 统计新生代的行为

jstat -gcnew 2654
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
1024.0 3584.0  544.0    0.0  1  15 3584.0  76288.0  27588.8 161376 3205.345

TT:Tenuring threshold提升阈值

MTT:最大的tenuring threshold

DSS:survivor区域的大小(KB)

    2.8 -gcnewcapacity 新生代相应内存统计

jstat -gcnewcapacity 2654
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC 
   41984.0   672256.0   415232.0 223744.0   3584.0 223744.0   8192.0   671232.0   289792.0 161464  1472

NGC:当前年轻代的容量KB;

S0CMX,S0C:最大的S0空间和当前S0使用空间

ECMX,EC:最大的Eden空间和当前eden空间

    2.9 -gcold -gcoldcapacity -gcpermcapacity 统计老年代的行为

    2.10 -printcompilation hotspot编译方法统计

jstat -printcompilation 2654
Compiled  Size  Type Method
   79318      5    1 java/util/concurrent/CopyOnWriteArrayList getArray

Compiled:被执行的编译任务数量

Size:方法字节码的字节数

Type:编译类型

Method:编译方法的类名和方法名

3. jmap :用于生成heap dump文件,还可以使用参数配置在OOM时候自动生成dump文件;jmap不仅能生成dump文件,还可以查询finalize执行队列,java堆和永久代的详细信息,如当前使用率,当前使用的是那种收集器等。

命令格式 jmap [option] LVMID
option参数 描述
dump 生成堆转储快照
finalizerinfo 显示在F-Quenue队列等待Finalizer线程执行finalizer方法的对象
heap

显示java堆详细信息

histo 显示堆哄对象的统计信息
permstat  
F 当-dump没有响应时,强制生成dump快照

    3.1 -dump -dump:live,format=b,file=dump.hprof 2654

dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件存储

4. jstack 用于生成java虚拟机当前时刻的线程快照,线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成

线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待,线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源,如果java程序奔溃生成core文件,jstack工具可以用来获的core文件的java stack 和native stack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的;

命令格式 jstack [option] LVMID
option参数 含义
-F 当正常输出请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈

 

你可能感兴趣的:(JVM,运维)