`

jstat使用

阅读更多
如何判断JVM是否存在内存问题呢?判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。

执行:cd $JAVA_HOME/bin中执行jstat,注意jstat后一定要跟参数。
语法结构:
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

参数解释:
    Options — 选项,我们一般使用 -gcutil 查看gc情况
    vmid    — VM的进程号,即当前运行的java进程号
    interval– 间隔时间,单位为秒或者毫秒
    count   — 打印次数,如果缺省则打印无数次
    jstat -class pid:显示加载class的数量,及所占空间等信息。
    jstat -compiler pid:显示VM实时编译的数量等信息。
    jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
    jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
    jstat -gcnew pid:new对象的信息。
    jstat -gcnewcapacity pid:new对象的信息及其占用量。
    jstat -gcold pid:old对象的信息。
    jstat -gcoldcapacity pid:old对象的信息及其占用量。
    jstat -gcpermcapacity pid: perm对象的信息及其占用量。
    jstat -util pid:统计gc信息统计。
    jstat -printcompilation pid:当前VM执行的信息。
    除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6 是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。

运行后显示结果的各列代表意义
S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
GCT 是YGCT 和FGCT的时间总和。

实例使用1:
[root@localhost bin]# jstat -gcutil 25444
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
11.63   0.00   56.46  66.92  98.49 162    0.248    6      0.331    0.579

实例使用2:(25444是java的进程号,ps -ef | grep java)
[root@localhost bin]# jstat -gcutil 25444 1000 5
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583
73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583
73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583
73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583
73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583
我们可以看到,5次young gc之后,垃圾内存被从Eden space区(E)放入了Old space区(O),并引起了百分比的变化,导致Survivor space使用的百分比从73.54%(S0)降到0%(S1)。有效释放了内存空间。我们可以看到,一次full gc之后,Old space区(O)的内存被回收,从99.05%降到67.52%。
图中同时打印了young gc和full gc的总次数、总耗时。而,每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到。例如红框中表示的第一行、第二行之间发生了1次young gc,消耗的时间为0.252-0.252=0.0秒。
常驻内存区(P)的使用率,始终停留在98.49%左右,说明常驻内存没有突变,比较正常。
如果young gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。

jstat -class pid:显示加载class的数量,及所占空间等信息。
实例使用3:
[root@localhost bin]# jstat -class 25917
Loaded  Bytes  Unloaded  Bytes     Time
2629    2916.8       29   24.6     0.90

jstat -compiler pid:显示VM实时编译的数量等信息。
实例使用4:
[root@localhost bin]# jstat -compiler 25917
Compiled Failed Invalid   Time   FailedType FailedMethod
     768      0       0   0.70            0

jstat –gccapacity :可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
[root@localhost bin]# jstat -gccapacity 25917
NGCMN       640.0
NGCMX       4992.0
NGC         832.0
S0C         64.0
S1C         64.0
EC          704.0
OGCMN       1408.0
OGCMX       60544.0
OGC         9504.0
OC          9504.0                  OC是old内纯的占用量
PGCMN       8192.0                  PGCMN显示的是最小perm的内存使用量
PGCMX       65536.0                 PGCMX显示的是perm的内存最大使用量
PGC         12800.0                 PGC是当前新生成的perm内存占用量
PC          12800.0                 PC是但前perm内存占用量
YGC         164
FGC         6

jstat -gcnew pid: new对象的信息
[root@localhost bin]# jstat -gcnew 25917
S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
64.0   64.0   47.4   0.0   2  15   32.0    704.0    145.7    168    0.254

jstat -gcnewcapacity pid: new对象的信息及其占用量
[root@localhost bin]# jstat -gcnewcapacity 25917
NGCMN  NGCMX   NGC   S0CMX  S0C   S1CMX  S1C   ECMX    EC      YGC   FGC
640.0  4992.0  832.0 64.0   448.0 448.0  64.0   4096.0  704.0  168     6

jstat -gcold pid: old对象的信息。
[root@localhost bin]# jstat -gcold 25917
   PC       PU        OC          OU       YGC    FGC    FGCT     GCT
12800.0  12617.6     9504.0      6561.3   169     6    0.335    0.591

jstat -gcoldcapacity pid:old对象的信息及其占用量。
[root@localhost bin]# jstat -gcoldcapacity 25917
OGCMN      OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
1408.0     60544.0      9504.0      9504.0   169     6    0.335    0.591

jstat -gcpermcapacity pid: perm对象的信息及其占用量。
[root@localhost bin]# jstat -gcpermcapacity 25917
PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT
8192.0    65536.0    12800.0    12800.0   169     6    0.335    0.591

jstat -printcompilation pid:当前VM执行的信息。
[root@localhost bin]# jstat -printcompilation -h3  25917 1000 5
每1000毫秒打印一次,一共打印5次,还可以加上-h3每三行显示一下标题。
Compiled  Size  Type Method
     788     73    1 java/io/File <init>
     788     73    1 java/io/File <init>
     788     73    1 java/io/File <init>
Compiled  Size  Type Method
     788     73    1 java/io/File <init>
     788     73    1 java/io/File <init>

=================================================

jstat

       1. jstat -gc pid

            可以显示gc的信息,查看gc的次数,及时间。

            其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

      2.jstat -gccapacity pid

            可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,

            如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,

            PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。

            其他的可以根据这个类推, OC是old内纯的占用量。

     3.jstat -gcutil pid

            统计gc信息统计。

     4.jstat -gcnew pid

           年轻代对象的信息。

     5.jstat -gcnewcapacity pid

           年轻代对象的信息及其占用量。

     6.jstat -gcold pid

          old代对象的信息。

     7.stat -gcoldcapacity pid

          old代对象的信息及其占用量。

     8.jstat -gcpermcapacity pid

          perm对象的信息及其占用量。

     9.jstat -class pid

          显示加载class的数量,及所占空间等信息。
     10.jstat -compiler pid

          显示VM实时编译的数量等信息。

     11.stat -printcompilation pid

          当前VM执行的信息。

        一些术语的中文解释:

         S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
           EC:年轻代中Eden(伊甸园)的容量 (字节)
           EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
           OC:Old代的容量 (字节)
           OU:Old代目前已使用空间 (字节)
           PC:Perm(持久代)的容量 (字节)
           PU:Perm(持久代)目前已使用空间 (字节)
         YGC:从应用程序启动到采样时年轻代中gc次数
       YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
         FGC:从应用程序启动到采样时old代(全gc)gc次数
       FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
         GCT:从应用程序启动到采样时gc用的总时间(s)

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

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

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

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

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

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

   PGCMN:perm代中初始化(最小)的大小 (字节)

   PGCMX:perm代的最大容量 (字节)  

       PGC:perm代当前新生成的容量 (字节)

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

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

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

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

           P:perm代已使用的占当前容量百分比

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

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

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

       DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

          TT: 持有次数限制

       MTT : 最大持有次数限制

      sun 官方文档  http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
分享到:
评论

相关推荐

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解.docx

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解 本文将对一些常用的 JVM 性能调优监控工具进行介绍,包括 jps、jstack、jmap、jhat、jstat 等工具的使用详解。这些工具对于 Java 程序员来说是必备的,...

    java诊断与调优常用命令jmap、jstack、jstat使用实战.pdf

    使用`jstat -gcuitl pid [interval] [count]` 可以看到内存使用率的百分比,帮助监控内存分配和回收效率。 掌握这些命令行工具的使用,能极大地提高对Java应用程序的诊断和优化能力。它们提供了深入洞察应用程序...

    jStat中文参考手册

    jStat是一个强大的JavaScript统计学库,它提供了丰富的统计计算功能,使得用户无需掌握专门的统计软件如MATLAB或R就能在Web应用中进行高级统计分析。jStat的核心特性包括静态方法和实例方法,这两种方法在处理数据时...

    jmap、jstack、jstat组合使用定位jvm问题.txt

    jmap、jstack、jstat组合使用定位jvm问题

    JVM内存—jstat分析

    本文将深入探讨`jstat`的使用方法及其提供的多种选项,帮助读者更好地理解如何利用`jstat`进行JVM内存管理。 #### 二、jstat简介 `jstat`是一种用于监控和故障排查基于HotSpot的JVM的应用程序。它能够提供关于JVM...

    java jstat 查看哪个进程频繁GC垃圾回收

    下面我们将详细探讨如何使用`jstat`工具以及通过配置GC日志来分析和优化Java进程。 `jstat`是Java虚拟机内置的一个命令行工具,用于实时监控JVM的各种运行状态,包括垃圾回收的信息。要查看哪个进程频繁进行GC,...

    jstat官方介绍

    由于jstat工具不受Oracle官方的支持,并且可能在未来版本的JDK中无法使用,因此在使用时需要注意其潜在的局限性。 jstat通过命令行执行,其基本语法是: ``` jstat [generalOption] [outputOptions] &lt;vmid&gt; ...

    jstat命令手册.pdf

    以下是jstat命令可使用的统计选项及其意义: 1. **gccause:** 显示有关垃圾回收(GC)统计信息的摘要,以及最后一个和当前GC事件的原因。这包括GC事件最后一次发生的原因以及当前正在发生的GC事件的原因。 2. **...

    jstat js正态分布函数库

    使用`jstat`库的开发者可以通过以下方式操作正态分布: - 初始化一个正态分布对象,例如 `var dist = new NormalDistribution(mean, stdDev)`,其中 `mean` 是均值,`stdDev` 是标准差。 - 使用对象的方法,如 `dist...

    jmap jstat等命令介绍

    `jmap`、`jstat`等命令是Java开发和运维人员的必备工具,它们提供了对JVM(Java虚拟机)内部状态的深入洞察,帮助我们了解内存使用、垃圾收集、线程状态等情况。下面将详细介绍这些命令及其在监控Tomcat内存使用情况...

    jstat:JavaScript统计库

    相反,在执行npm install或类似操作时,请使用全部小写的jstat 。 在浏览器中使用jStat jStat可以在浏览器中使用。 jStat对象将添加到窗口中。 例如: [removed][removed] &lt;!-- include jStat, from the CDN ...

    jstat-1压缩包1111

    总之,jstat是Java开发者和运维人员诊断和优化JVM性能的有力工具,掌握其使用方法对于提升Java应用的性能至关重要。通过持续监控和分析,我们可以更好地理解应用的运行状况,及时发现并解决问题,从而确保系统的稳定...

    前端项目-jstat.zip

    3. **docs**:文档资料,可能包括API参考、教程或者示例,帮助开发者理解和使用jstat库。 4. **examples**:示例代码,展示如何在实际项目中应用jstat的功能。 5. **test**:测试用例,确保库的各个函数按预期工作,...

    jstat-examples:jstat库的用法示例

    jstat-示例 使用示例 实例图 机器学习 :线性回归 :非线性回归 :使用香草KNN算法进行分类 :具有多个线程的KNN分类 :使用KMeans进行聚类 :后勤分类 :使用正则化LassoRegularizer和RidgeRegularizer线性...

    jStat-开源

    对于开源项目,这可能是GPL、MIT、Apache等常见许可证,规定了软件可以如何被使用、修改和分发。 - **jStat**:这个文件可能包含项目的主程序代码或库文件。由于没有具体的扩展名,它可能是压缩包内的目录,包含了...

    jstat.xlsx

    jstat.xlsx

    angular-jstat:jStat统计库的角度包装

    为了更好地使用Angular-JStat,你需要熟悉AngularJS的依赖注入系统,理解如何在AngularJS的模块、控制器和服务中使用服务。同时,对jStat的统计方法有深入的理解,才能充分发挥这个库的能力。如果你遇到问题,可以...

    使用python来简单实现jdk几个指令.zip

    这个压缩包文件"使用python来简单实现jdk几个指令.zip"提供了一种使用Python来实现Java JDK中几个基础命令的方法,例如`jps`和`jstat`。下面将详细解释这些知识点。 1. **Java Development Kit (JDK)**: JDK是Java...

    JVM内存模型和性能调优:JVM调优工具详解及调优实战:jstat – 第38篇

    在本例中,使用的JDK版本为JDK 8,使用`jstat -gc pid`命令可以获取关于垃圾收集的详细信息,包括年轻代、老年代的内存使用情况,以及垃圾收集的时间和频率等。 二、垃圾回收统计 垃圾回收(Garbage Collection, ...

    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc

    `jstat` 是一个基于命令行的监控工具,用于实时监控Java应用的资源使用和性能指标,特别关注Heap大小和垃圾回收的状态。它利用了JVM内部机制,无需额外依赖即可提供详尽的性能数据。 #### 其他工具简述 - **jps**...

Global site tag (gtag.js) - Google Analytics