JVM(03):JVM常见内存监控、性能调优等命令详解

1、jps:JVM Process Status Tool:

    显示指定系统内所有的HotSpot虚拟机进程。

1.1、命令格式: 

    jps    [ options ] [ hostid ]
    比如:jps

1.2、options 选项说明

1.2.1、-q:只输出LVMID,省略主类的名称

1.2.2、-m:输出虚拟机进程启动时传递给主类main()函数的参数

1.2.3、-l:输出主类的全名,如果进程执行的是jar包,输出jar包路径

1.2.4、-v:输出虚拟机进程启动时的JVM参数

2、jstat:虚拟机统计信息监视工具

    jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机的类装载、内存、垃圾收集、JIT编译等运行数据。

2.1、jstat命令格式

    jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

  • opetion:操作类型,可jstat -options 查看可操作的类型
  • vmid:vimd和lvmid:如果是本地虚拟机进程,VMID和LVMID一致。如果是远程虚拟机进程,VMID的格式为:
        [ protool: ] [ // ] lmid [ @hostname [ :port ] /servername ]
        参数interval和count查询间隔和次数,如果省略该参数,则表示只查询一次。
        例如:jstat -gc 2764 250 20    表示每隔250毫秒查询一下内存收集情况,一共查询20次。
  • lines:显示开头num行记录
  • interval:间隔毫米数
  • count:查询次数

2.2、option参数

    可通过如下命令查看option选项:jstat -options
  • -class:监视类装载、卸载数量、总空间及类装载所耗费的时间。
  • -gc:监视Java堆情况,包括Eden区、2个surivivor区、老年代、永久代等容量、已用空间、GC时间合计等信息。
  • -gccapacity:与gc基本相同,输出主要关注Java堆各个区域使用到的最大和最小空间。
  • -gcutil:与gc基本相同,输出主要关注已使用空间占总空间的百分比。
  • -gccause:与gc基本一样,会额外输出导致上一次gc的原因。
  • -gcnew:监视新生代gc状况。
  • -gcnewcapacity:与gcnew一样,输出主要关注使用到的最大和最小空间。
  • -gcold:监视老年代。
  • -gcoldcapacity:与gcold一样,输出主要关注使用到的最大和最小空间。
  • -gcpermcapacity:输出永久代使用到的最大和最小空间。
  • -compiler:输出JIT编译器编译过的方法、耗时等信息。
  • -printcompilation:输出已经被JIT编译的方法。

2.3、命令示例

2.3.1、查看gc统计时间:

  • S0C:第一个幸存区的大小 
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:Eden区的大小
  • EU:Eden区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小(元空间)
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间,单位sFGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间,单位s
  • GCT:垃圾回收消耗总时间,单位s 

2.3.2、查看堆统计信息

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • EC:Eden区的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:当前老年代大小
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代gc次数
  • FGC:老年代GC次数

2.3.3、新生代垃圾回收统计

  • S0C:第一个幸存区的大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • TT:对象在新生代存活的次数
  • MTT:对象在新生代存活的最大次数
  • DSS:期望的幸存区大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间

2.3.4、新生代内存统计

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0CMX:最大幸存1区大小
  • S0C:当前幸存1区大小
  • S1CMX:最大幸存2区大小
  • S1C:当前幸存2区大小
  • ECMX:最大伊甸园区大小
  • EC:当前伊甸园区大小
  • YGC:年轻代垃圾回收次数FGC:老年代回收次数

2.3.5、老年代垃圾回收统计

  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

2.3.6、老年代内存统计

  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:老年代大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间
2.3.7、元数据空间统计

  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

2.3.8、已使用空间占总空间的百分比

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

3、jinfo:Java配置信息工具

    jinfo(Configuration Info for Java)可以实时的查看和调整虚拟机的各项参数。使用jps -v可以查看虚拟机启动时显式指定的参数列表。

3.1、用法

jinfo指令格式

  • jinfo [option] <pid>:查询正在运行的进程的jvm参数
  • jinfo [option] <executable <core>:查询核心进程的相关信息
  • jinfo [option] [server_id@]<remote server IP or hostname>:查询远程虚拟机的相关信息

Option参数说明:

  • -flag <name>:显示指定参数的值
  • -flag [+|-]<name>:使用或禁止JVM某个参数
  • -flag <name>=<value>:设置JVM某个参数的值
  • -flags:显示应用JVM所有参数信息
  • -sysprops:显示JVM系统参数信息
  • <no option>:显示JVM系统级别和应用级别信息
  • -h | -help:显示该指令的帮助操作信息

3.2、显示JVM所有的参数

3.3、查看某个JVM参数的值,比如:查看MaxNewSize的值

3.4、查看Java系统参数

4、jstack:java堆栈信息查看工具

    主要用来生成虚拟机当前时刻的线程快照,也就是当前虚拟机内每一条线程正在执行的方法堆栈集合信息。主要用来分析线程出现长时间停顿的原因,比如线程间死锁、死循环、请求外部资源长时间等待等问题。

4.1、用法

    jstack [ option ] vmid

4.2、option 参数说明

  • -F:当请求不被响应时,强制输出线程堆栈信息
  • -m:如果调用本地方法,则显示C/C++堆栈信息
  • -l:处堆栈外,显示关于锁的附加信息
  • -h:输出帮助信息

4.3、命令参数使用样例

4.3.1、-l:显示关于锁的附加信息

4.3.2、-m:显示堆栈信息,包括C/C++

5、jmap:Java内存映像工具

    该命令主要用于生成堆转储快照,一般称为heapdump或者dump文件。其他获取堆转储快照的方式相对暴力,有如下几种:
  • 配置-XX:HeapDumpOnOutMemoryError:让虚拟机在OOM异常后自动生成dump快照。
  • 配置-XX:HeapDumpOnCtrlBreak:可以使用Ctrl+Break让虚拟机生成dump快照。
  • Linux系统下通过kill -3发出进程退出信号来恐吓虚拟机,也能生成dump文件。

5.1、jmap命令操作

jmap格式
  • jmap [option] <pid>:查询正在运行的进程的jvm内存快照
  • jmap [option] <executable <core>:查询核心进程jvm内存快照
  • jmap [option] [server_id@]<remote server IP or hostname>:查询远程虚拟机的内存快照信息

5.2、option指令格式:

  • -dump:生成java堆转储快照。
  • -finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象。
  • -heap:显示java堆详细信息。比如:使用哪种收集器、参数配置、分代情况等。
  • -histo:显示堆中的统计信息,包括类、实例数量、合计容量
  • -F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。

5.3、操作指令示例

5.3.1、-dump:生成java堆转储快照。例如

         jmap -dump:live,format=b,file=open.log 968    获取对中存活对象的快照
         jmap -dump:format=b,file=open.log 968    获取堆中所有对象的快照

5.3.2、-finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象。

    当前系统执行finalization:0, 数量为0。

5.3.3、-heap:显示java堆详细信息。比如:使用哪种收集器、参数配置、分代情况等。

5.3.4、-histo:显示堆中的统计信息,包括类、实例数量、合计容量

    jmap -histo:live pid:显示存活的对象的统计信息
    jmap -histo pid:显示所有对象的统计信息,包括最近被回收的快照

  •             num:序号
  •             instances:实际数量
  •             bytes:占用空间大小
  •             class name:详细类名、对象名等信息。

5.3.5、-F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。

6、jhat:虚拟机堆转储快照分析工具

6.1、命令格式

Usage:  jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>

        -J<flag>          Pass <flag> directly to the runtime system. For
                          example, -J-mx512m to use a maximum heap size of 512MB
        -stack false:     Turn off tracking object allocation call stack.
        -refs false:      Turn off tracking of references to objects
        -port <port>:     Set the port for the HTTP server.  Defaults to 7000
        -exclude <file>:  Specify a file that lists data members that should
                          be excluded from the reachableFrom query.
        -baseline <file>: Specify a baseline object dump.  Objects in
                          both heap dumps with the same ID and same class will
                          be marked as not being "new".
        -debug <int>:     Set debug level.
                            0:  No debug output
                            1:  Debug hprof file parsing
                            2:  Debug hprof file parsing, no server
        -version          Report version number
        -h|-help          Print this help and exit
        <file>            The file to read

6.2、查看生成的堆快照文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值