天天看点

Java虚拟机(三):虚拟机性能监控与故障处理工具

3.1 概述

          给系统定位问题时,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的字段。这里的数据是包括:运行日志、异常堆栈、GC日志、线程快照(threaddump / javacore文件)、堆转储快照(headdump / hprof文件)等。

3.2 JDK的命令行工具        

          Sun JDK监控和故障处理工具如下:

Java虚拟机(三):虚拟机性能监控与故障处理工具

     3.2.1 jps:虚拟机进程状况工具

              jps(JVM Process Status Tool)可以列出正在运行的虚拟机进程,并显示虚拟机主类(Main Class, main()函数所在的类)名称,以及这些进程的本地虚拟机唯一ID。               jps命令格式:jps  [options]  [hostid]                   示例:jps -vl 

546  -Dosgi.requiredJavaVersion=1.8 -XX:+UseG1GC -XX:+UseStringDeduplication -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
755 sun.tools.jps.Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home -Xms8m
575  -Dosgi.requiredJavaVersion=1.6 -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -XX:MaxPermSize=256m -Xms40m -Xmx512m -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
           

            jps工具主要选项如下:

Java虚拟机(三):虚拟机性能监控与故障处理工具

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

                jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。                jstat命令格式为:jstat [ option vmid [ interval [ s | ms ]  [count] ] ]                对于命令行格式中的VMID与LVMID:如果是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是:                [protocol:] [//] lvmid [@hostname [:port]/servername]               参数interval和count代表查询间隔和次数,说明只查询一次。如假设需要每个250毫秒去查询一次进程768垃圾收集状况,一共查询了20次,那命令应当是:                jstat  -gc 768  250  20               

Java虚拟机(三):虚拟机性能监控与故障处理工具

               选项option代表着用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行期编译状况,具体选项如下:

Java虚拟机(三):虚拟机性能监控与故障处理工具

      3.2.3 jinfo:Java配置信息工具

                 jinfo(Configuration Info for Java) 的作用是实时地查看和调整虚拟机各项参数。

      3.2.4 jmap:Java内存映像工具

                  jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。                  jmap的作用并不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的那种收集器等。                  jmap命令格式                  jmap   [options]  vmid

Java虚拟机(三):虚拟机性能监控与故障处理工具

                  如通过jps -vl 首先查询到eclipse的vmid为547,让后查看547的堆详细信息。命令及图如下:                  jps -vl                   jmap -heap 547

Java虚拟机(三):虚拟机性能监控与故障处理工具

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

               Sun JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。                但一般不推荐使用,一是不会在应用服务器上直接分析dump文件,耗时且吃硬件资源,二是jhat的分析功能相对简陋。

     3.2.6 jstack:Java堆栈跟踪工具

                  jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的就是定位线程出现长时间停顿的原因,如线程间死锁、死锁循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就是知道没有响应的线程到底在后台做些什么事情,或者等待什么资源。                jstack命令格式:                jstack  [options]  vmid                如jstack -l 547。options选项如下:

Java虚拟机(三):虚拟机性能监控与故障处理工具

3.3 JDK的可视化工具

        JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。通过JDK/bin目录下的“jconsole.exe”启动。         VisuaIVM(All-in-one Java Troubleshooting Tool)是目前功能最强大的运行监视和故障处理程序,基于NetBeans平台开发,具备了插件扩展功能的特性,通过扩展扩展支持,VisuaIVM可以做到:          (1)显示虚拟机进程以及进程的配置、环境信息(jps,jinfo)          (2)监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)          (3)dump以及分析堆转储快照(jmap、jhat)

         (4)方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法

         (5)离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈

         (6)其它plugins的无限的可能性