JVM性能分析:Jstat命令详解与Arthas

一、Jstat使用详解

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。参考格式如下:jstat -options  pid  interval (pid:应用id,interval:时间间隔。这两项可以选填

可以列出当前JVM版本支持的选项,常见的options有:

l  class (类加载器) 

l  compiler (JIT) 

l  gc (GC堆状态) 

l  gccapacity (各区大小) 

l  gccause (最近一次GC统计和原因) 

l  gcnew (新区统计)

l  gcnewcapacity (新区大小)

l  gcold (老区统计)

l  gcoldcapacity (老区大小)

l  gcpermcapacity (永久区大小)

l  gcutil (GC统计汇总)

l  printcompilation (HotSpot编译统计)

1、jstat –class<pid> : 显示加载class的数量,及所占空间等信息。

Loaded:装载的类的数量

Bytes:装载类所占用的字节数

Unloaded:卸载类的数量

Bytes:卸载类的字节数

Time:装载和卸载类所花费的时间

2、jstat -compiler <pid>显示VM实时编译的数量等信息。

Compiled:编译任务执行数量

Failed:编译任务执行失败数量

Invalid:编译任务执行失效数量

Time:编译任务消耗时间

FailedType:最后一个编译失败任务的类型

FailedMethod:最后一个编译失败任务所在的类及方法

3、jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间。

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC :Old代的容量 (字节)

OU:Old代目前已使用空间 (字节)

MC:metaspace元数据空间的容量 (字节)

MU:metaspace元数据空间目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

4、jstat -gccapacity <pid>:可以显示,VM内存中(young,old,metaspace)对象的使用和占用大小

NGCMN:年轻代(young)中初始化(最小)的大小(字节)

NGCMX:年轻代(young)的最大容量 (字节)

NGC:年轻代(young)中当前的容量 (字节)

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

OGCMN:old代中初始化(最小)的大小 (字节)

OGCMX :old代的最大容量(字节)

OGC:old代当前新生成的容量 (字节)

OC:Old代当前容量 (字节)

MCMN:元数据区初始化(最小)时的容量 (字节)

MCMX:元数据区的最大容量 (字节)  

MC:元数据区当前占用的容量 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

CCSMN:压缩类最小内存区

CCSMX:压缩类最大内存区

CCSC:压缩类当前占用内存大小

5、jstat -gcutil <pid>:统计gc信息

S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

O:old代已使用的占当前容量百分比

M:元数据区已使用的占当前容量百分比

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

6、jstat -gcnew <pid>:年轻代对象的信息:

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

TT:持有次数限制

MTT:最大持有次数限制

EC:年轻代中Eden(伊甸园)的容量 (字节)

EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

7、jstat -gcnewcapacity<pid>: 年轻代对象的信息及其占用量:

NGCMN:年轻代(young)中初始化(最小)的大小(字节)

NGCMX:年轻代(young)的最大容量 (字节)

NGC:年轻代(young)中当前的容量 (字节)

S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)

EC:年轻代中Eden(伊甸园)的容量 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

8、jstat -gcold <pid>:old代对象的信息:

MC:元数据区的容量 (字节)

MU:元数据区目前已使用空间 (字节)

OC:Old代的容量 (字节)

OU:Old代目前已使用空间 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

9、stat -gcoldcapacity <pid>: old代对象的信息及其占用量:

OGCMN:old代中初始化(最小)的大小 (字节)

OGCMX:old代的最大容量(字节)

OGC:old代当前新生成的容量 (字节)

OC:Old代的容量 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

10、jstat -gcmetacapacity<pid>: 元数据对象的信息及其占用量:

MCMN:元数据区初始化(最小)的大小 (字节)

MCMX:元数据区的最大容量 (字节)  

MC:元数据区当前新生成的容量 (字节)

YGC:从应用程序启动到采样时年轻代中gc次数

FGC:从应用程序启动到采样时old代(全gc)gc次数

FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)

CCSMN:压缩类最小内存区

CCSMX:压缩类最大内存区

CCSC:压缩类当前占用内存大小

11、jstat -printcompilation <pid>:当前VM执行的信息:

Compiled:编译任务的数目

Size:方法生成的字节码的大小

Type:编译类型

Method:类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的

二、Arthas使用

1、下载安装

wget https://alibaba.github.io/arthas/arthas-boot.jar

java -jar arthas-boot.jar

2、安装启动完成后,Arthas会自动检测java程序,这时候,你选择一下就可以了:

                            

3、启动完成后,输入命令就可以监控Java程序了

                                              

4、常用命令:

  • dashboard
dashboard
 USAGE:
   dashboard [-b] [-i <value>] [-n <value>]

 SUMMARY:
   Overview of target jvm's thread, memory, gc, vm, tomcat info.

 EXAMPLES:
   dashboard
   dashboard -n 10
   dashboard -i 2000

 WIKI:
   https://alibaba.github.io/arthas/dashboard

 OPTIONS:
 -b, --batch                                   Execute this command in batch mode.
 -i, --interval <value>                        The interval (in ms) between two executions, default is 5000 ms.
                                              (每次执行间隔时间)
 -n, --number-of-execution <value>             The number of times this command will be executed.
                                              (执行多少次dashboard,不指定的话会一直刷新)
  • thread:查看当前JVM中的线程信息
$ thread
 USAGE:
   thread [-b] [-i <value>] [-n <value>] [id]

 SUMMARY:
   Display thread info, thread stack

 EXAMPLES:
   thread
   thread 51
   thread -n -1
   thread -n 5
   thread -b
   thread -i 2000

 WIKI:
   https://alibaba.github.io/arthas/thread

 OPTIONS:
 -b, --include-blocking-thread   Find the thread who is holding a lock that blocks the most number of threads.
                                (查看目前block的线程)                                 
 -i, --sample-interval <value>   Specify the sampling interval (in ms) when calculating cpu usage.
                                (查看在接下来的多长时间内的cpu利用率)                           
 -n, --top-n-threads <value>     The number of thread(s) to show, ordered by cpu utilization, -1 to show all.
                                ( 查看cpu占用率前n的线程的堆栈信息)
 <id>                            Show thread stack(直接跟着线程id,可以看到thread的堆栈信息)
  • 基础命令
help——查看命令帮助信息
cat——打印文件内容,和linux里的cat命令类似
pwd——返回当前的工作目录,和linux命令类似
cls——清空当前屏幕区域
session——查看当前会话的信息
reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version——输出当前目标 Java 进程所加载的 Arthas 版本号
history——打印命令历史
quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymap——Arthas快捷键列表及自定义快捷键

在此介绍dashboard、thread这两个经常使用的命令,其他指令可以根据需求自行查找,可以查看官方文档或者百度自行搜索,在此就不一一介绍了!

官方文档:https://alibaba.github.io/arthas

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值