最近项目里面使用到了多线程,有时候多线程会存在挂掉的情况,趁机好好学习总结一下JVM调优的方法。

jstat使用:
  #jstat -help|-options
  #jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
    Options —         选项,我们一般使用 -gcutil 查看gc情况
    t,h —           t是显示Timestamp时间间隔列,h是显示标题,-h3每三行显示标题
    vmid —          VM的进程号,即当前运行的java进程号
    interval–           间隔时间,单位为秒或者毫秒
    count —           打印次数,如果缺省则打印无数次
  参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每1000毫秒查询一次进程2288垃圾收集状况,一共查询5次命令行如下:
  #jstat -gc 2288 1000 5
  如果是远程虚拟机:lvmid格式是:  [protocol:][//] lvmid [@hostname[:port]/servername]
  选项option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及作用如下:
    class (类加载器):        jstat -class pid:显示加载class的数量,及所占空间等信息。
    compiler (JIT):          jstat -compiler pid:显示VM实时编译的数量等信息。
    gc (GC堆状态):         jstat -gc pid:可以显示gc的信息,查看gc的次数及时间。其中最后五项分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
    gccapacity (各区大小):       jstat -gccapacity pid:可以显示VM内存中三代(young,old,perm)对象的使用和占用大小。如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
    gccause (最近一次GC统计和原因):          jstat -gccause pid:最近一次GC的cause。
    gcmetacapacity (元数据区的容量):              jstat -gcmetacapacity pid:元数据空间统计
    gcnew (新区统计):                  jstat -gcnew pid:new对象的信息。
    gcnewcapacity (新区大小):                jstat -gcnewcapacity pid:new对象的信息及其占用量。
    gcold (老区统计):                  jstat -gcold pid:old对象的信息。
    gcoldcapacity (老区大小):               jstat -gcoldcapacity pid:old对象的信息及其占用量。
    gcpermcapacity (永久区大小):             jstat -gcpermcapacity pid: perm对象的信息及其占用量(1.8已移除).
    gcutil (GC统计汇总):                  jstat -util pid:统计gc信息统计。
    printcompilation (HotSpot编译统计):            jstat -printcompilation pid:当前VM执行的信息。
  在 JDK 1.7 及以往的 JDK 版本中,Java 类信息、常量池、静态变量都存储在 Perm(永久代)里。类的元数据和静态变量在类加载的时候分配到 Perm,当类被卸载的时候垃圾收集器从 Perm 处理掉类的元数据和静态变量。当然常量池的东西也会在 Perm 垃圾收集的时候进行处理。
  JDK 1.8 的对 JVM 架构的改造将类元数据放到本地内存中,另外,将常量池和静态变量放到 Java 堆里。HotSopt VM 将会为类的元数据明确分配和释放本地内存。在这种架构下,类元信息就突破了原来 -XX:MaxPermSize 的限制,现在可以使用更多的本地内存。这样就从一定程度上解决了原来在运行时生成大量类的造成经常 Full GC 问题,如运行时使用反射、代理等。

参数详解:
  jstat -gc 2244 1000 5
各列意义:
  S0C:年轻代中第一个存活区的大小
  S1C:年轻代中第二个存活区的大小
  S0U:年轻代中第一个存活区已使用的空间 (KB)
  S1U:年轻代中第二个存活区已使用的空间 (KB)
  EC: Edem区大小
  EU: 年轻代中Edem区已使用的空间 (KB)
  OC: 老年代大小
  OU: 老年代已使用的空间 (KB)
  PC: 持久代大小
  PU: 持久代已使用的空间 (KB)
  YGC: 从应用程序启动到采样时young gc的次数
  YGCT: 从应用程序启动到采样时young gc的所用的时间(s)
  FGC: 从应用程序启动到采样时full gc的次数
  FGCT: 从应用程序启动到采样时full gc的所用的时间
  GCT: 从应用程序启动到采样时整个gc所用的时间
  如果young gc所用的时间比较长,如超过几秒,则young gc不正常。

  jstat -gcutil 2244 1000 5
各列意义:
  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的时间总和。

  jstat -class 2244
各列意义:
  Loaded 装载的类的数量
  Bytes 装载类所占用的字节数
  Unloaded 卸载类的数量
  Bytes 卸载类的字节数
  Time 装载和卸载类所花费的时间

  jstat -compiler 2244
各列意义:
  Compiled 编译任务执行数量
  Failed 编译任务执行失败数量
  Invalid 编译任务执行失效数量
  Time 编译任务消耗时间
  FailedType 最后一个编译失败任务的类型
  FailedMethod 最后一个编译失败任务所在的类及方法

  jstat -gccapacity 2244
各列意义:
  NGCMN 年轻代(young)中初始化(最小)的大小(KB)
  NGCMX 年轻代(young)的最大容量 (KB)
  NGC 年轻代(young)中当前的容量 (KB)
  S0C 年轻代中第一个survivor(幸存区)的容量 (KB)
  S1C 年轻代中第二个survivor(幸存区)的容量 (KB)
  EC 年轻代中Eden(伊甸园)的容量 (KB)
  OGCMN old代中初始化(最小)的大小 (KB)
  OGCMX old代的最大容量(KB)
  OGC old代当前新生成的容量 (KB)
  OC Old代的容量 (KB)
  PGCMN perm代中初始化(最小)的大小 (KB)
  PGCMX perm代的最大容量 (KB)
  PGC perm代当前新生成的容量 (KB)
  PC Perm(持久代)的容量 (KB)
  YGC 从应用程序启动到采样时年轻代中gc次数
  FGC 从应用程序启动到采样时old代(全gc)gc次数

  jstat -gcnew 2244
各列意义:
  S0C 年轻代中第一个survivor(幸存区)的容量 (KB)
  S1C 年轻代中第二个survivor(幸存区)的容量 (KB)
  S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (KB)
  S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (KB)
  TT 持有次数限制 MTT 最大持有次数限制
  EC 年轻代中Eden(伊甸园)的容量 (KB)
  EU 年轻代中Eden(伊甸园)目前已使用空间 (KB)
  YGC 从应用程序启动到采样时年轻代中gc次数
  YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

  jstat -gcnewcapacity 2244
各列意义:
  NGCMN 年轻代(young)中初始化(最小)的大小(KB)
  NGCMX 年轻代(young)的最大容量 (KB)
  NGC 年轻代(young)中当前的容量 (KB)
  S0CMX 年轻代中第一个survivor(幸存区)的最大容量 (KB)
  S0C 年轻代中第一个survivor(幸存区)的容量 (KB)
  S1CMX 年轻代中第二个survivor(幸存区)的最大容量 (KB)
  S1C 年轻代中第二个survivor(幸存区)的容量 (KB)
  ECMX 年轻代中Eden(伊甸园)的最大容量 (KB)
  EC 年轻代中Eden(伊甸园)的容量 (KB)
  YGC 从应用程序启动到采样时年轻代中gc次数
  FGC 从应用程序启动到采样时old代(全gc)gc次数

  jstat -gcold 2244
各列意义:
  PC Perm(持久代)的容量 (KB)
  PU Perm(持久代)目前已使用空间 (KB)
  OC Old代的容量 (KB)
  OU Old代目前已使用空间 (KB)
  YGC 从应用程序启动到采样时年轻代中gc次数
  FGC 从应用程序启动到采样时old代(全gc)gc次数
  FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  GCT从应用程序启动到采样时gc用的总时间(s)

  jstat -gcoldcapacity 2244
各列意义:
  OGCMN old代中初始化(最小)的大小 (KB)
  OGCMX old代的最大容量(KB)
  OGC old代当前新生成的容量 (KB)
  OC Old代的容量 (KB)
  YGC 从应用程序启动到采样时年轻代中gc次数
  FGC 从应用程序启动到采样时old代(全gc)gc次数
  FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  GCT 从应用程序启动到采样时gc用的总时间(s)

  jstat -gcmetacapacity 2244
各列意义:
  MCMN 元数据初始化(最小)的大小 (KB)
  MCMX 元数据初始化(最大)的大小 (KB)
  MC 元数据使用大小 (KB)
  CCSMN 元数据
  CCSMX 元数据
  CCSC 元数据
  YGC 从应用程序启动到采样时年轻代中gc次数
  FGC 从应用程序启动到采样时old代(全gc)gc次数
  FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  GCT 从应用程序启动到采样时gc用的总时间(s)

  jstat -printcompilation 2244
各列意义:
  Compiled 编译任务的数目
  Size 方法生成的字节码的大小
  Type 编译类型
  Method 类名和方法名用来标识编译的方法。

jstat 详解的更多相关文章

  1. JVM jstat 详解

    http://www.ityouknow.com/java/2017/03/01/jvm-overview.html 本文基于JDK1.8 https://blog.csdn.net/maosijun ...

  2. jstat详解

    jstat 1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间. 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时 ...

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

    转载:http://blog.csdn.net/tzs_1041218129/article/details/61630981 javap 和 javac javap -help javac -hel ...

  4. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  5. Spark2.1.0——内置Web框架详解

    Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...

  6. JVM性能分析工具详解--MAT等

    获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...

  7. jdk目录详解及其使用方法

    jdk目录详解 jdk目录详解 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的 ...

  8. Java生产环境下性能监控与调优详解视频教程 百度云 网盘

    集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...

  9. Java 虚拟机详解

    深入理解JVM 1   Java技术与Java虚拟机 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成: Java编程语言.Java类文件格式.Java虚 ...

随机推荐

  1. 使用tailor 轻松方便的集成web 框架react&&vue

    tailor 是一款很方便的layout 服务,类似facebook 的bigpipe,我们可以使用此工具 方便的集成各类web 框架,实现micro-fronteds 开发 参考demo https ...

  2. Debug outlook add-in (office.js) 小技巧

    这几天在使用office.js 做outlook add-in的时候出现了一个问题: 不知道运行时去调试. 这里给大家介绍两个调试add-in 的方法. office365 其他软件 add-ins ...

  3. RequireJS 学习资料收集

    RequireJS 学习资料收集 RequireJS 模块化管理 Javascript 比较优秀. RequireJS 英文官网 https://requirejs.org/ RequireJS 中文 ...

  4. 本地开发不用改hosts 也可以绑定域名开发

    以往我们在开发 web 应用时,为了模拟生产环境都会修改系统中的hosts 文件,加入一个域名指向 127.0.0.1,绑定到开发目录,如下: 但是在 Chrome 中有一个域名是可以不用修改 hos ...

  5. create a simple COM object

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAArsAAAGYCAIAAADN0b3QAAAgAElEQVR4nO29749c1b2nW/4Lzh8wUr

  6. operator <<”不明确

    在声明重载的输出运算符<< 时,如果声明时的返回类型是std::ostream,而不是std::ostream&,但是定义的时候又加了引用的话,那么就会报“operator < ...

  7. elasticsearch 基础 语法总结

    1. es 使用 restful 风格的 api 备注: es 的 api  格式  基本是这个样     请求方式    /索引名/文档名/id?参数   ,但是 还有 很多不是这样的 请求,比如 ...

  8. RedHat6.5上安装Hadoop单机

    版本号:RedHat6.5   JDK1.8   Hadoop2.7.3 hadoop  说明:从版本2开始加入了Yarn这个资源管理器,Yarn并不需要单独安装.只要在机器上安装了JDK就可以直接安 ...

  9. 阿里云香港B区通过IPV6规避Google验证码

    最近买了阿里云香港B来FQ,然而被Google的验证码折磨的死去活来.四处查询,终于找到了一个合适的方案. 添加IPV6支持 阿里云香港是没有IPV6地址的,需要一个tunnel,这边使用HE.NET ...

  10. R基于Bayes理论实现中文人员特性的性别判定

    参见 基于中文人员特征的性别判定方法  理论,告诉一个名字,来猜猜是男是女,多多少少有点算命的味道.此命题是一种有监督的学习方法,从标注好的训练数据学习到一个预测模型,然后对未标注的数据进行预测. 1 ...