Java应用故障排查

来源:互联网 发布:2016最好的网络武侠剧 编辑:程序博客网 时间:2024/05/16 15:18

常用工具

  1. jps
    jps命令用来数据jvm虚拟机进程的一些消息,有点类似于Linux的ps命令,可以列出虚拟机当前正在执行的进程,并显示其主类(即main函数所在的class)和进程的ID,后续查性能的工具都需要进程ID
    jps命令的一些选项:
    • -q只输出进程ID的名称,而省略主类的名称
    • -m输出进程启动时传递给main函数的参数
    • -l输出主类的全名,如果执行的是jar文件,则输出jar文件的路径
    • -v输出虚拟机进程启动时所带的jvm参数
  2. jstat
    pid:进程ID
    • jstat -gc pid
      可以显示gc的信息,查看gc的次数,及时间。
      其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
    • jstat -gccapacity pid
      可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,
      如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,
      PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。
      其他的可以根据这个类推, OC是old内纯的占用量。
    • jstat -gcutil pid
      统计gc信息统计。
    • jstat -gcnew pid
      年轻代对象的信息。
    • jstat -gcnewcapacity pid
      年轻代对象的信息及其占用量。
    • jstat -gcold pid
      old代对象的信息。
    • stat -gcoldcapacity pid
      old代对象的信息及其占用量。
    • jstat -gcpermcapacity pid
      perm对象的信息及其占用量。
    • jstat -class pid
      显示加载class的数量,及所占空间等信息。
    • jstat -compiler pid
      显示VM实时编译的数量等信息。
    • jstat -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 : 最大持有次数限制
  3. jinfo
    可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数
    -sysprops process_id:查看java系统参数
    -flag pid:打印指定JVM的参数值
    -flag [+|-] pid:设置指定JVM参数的布尔值
    -flag = pid:设置指定JVM参数的值
  4. jmap
    用来查看堆内存使用状况