JVM读书笔记之性能监控与故障处理工具

来源:互联网 发布:mac压缩软件 编辑:程序博客网 时间:2024/05/17 03:14

一. JVM数据

      JVM中的数据包括:运行日志,异常堆栈,GC日志,线程快照(threaddump/javacore文件),堆转储快照(headdump/hprof文件)。

二. JDK的命令行工具

      JDK bin目录下的有许多命令行工具,比如java.exe与javac.exe。Sun公司也提供了对JVM监控和故障处理的工具。

三. 工具详解

      1.JVM Process Status Tool(jps)
         列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class)的名称,以及这些进程在本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。

选项作用Jps -q只输出LVMID,缺省主类名称-m输出虚拟机进程启动时传给主类Main函数的参数-l输出主类的全名-v输出虚拟机进程启动时JVM参数
      2.JVM Statistics Monitoring Tool (jstat)
          用于监视虚拟机各种运行状态信息的命令行工具,可以显示本地或远程虚拟机进程中的类装载、内存、垃圾回收、JIT编译等运行数据。是虚拟机运行期定位虚拟机性能问题的首选工具。
         Jstat的命令格式为:jstat -[<option> <vmid> [<interval> [<count>]]。
  • vmid如果是本地虚拟机进程,则VMID与LVMID一致;如果是远程虚拟机进程,VMID格式为:[protocol:] [//] lvmid[@localhost[;port]/servername]
  • Interval:代表查询间隔
  • Count:代表查询次数
  • Option:代表用户希望查询的虚拟机信息,主要分为3类:类装载,GC,运行期编译情况。
                                                    option选项

选项作用-class监视类装载,卸载数量,总空间以及类装载所耗费时间-gc监视java堆的情况,包括Eden区,两个survivor区,老年代,永久代,已用空间等信息-gccapacity监视内容与gc基本相同,但主要输出Java堆各个区域用到的最大空间和最小空间-gcutil监视内容与gc基本相同,但主要关注已用空间占总空间百分比-gccause与-gcutil功能一样,但是会额外输出上次GC产生原因-gcnew监视新生代GC-gcnewcapacity监视内容与-gcnew相同,输出主要关注使用到的最大空间与最小空间-gcold监视老年代GC-gcoldcapacity监视内容与-gcold相同,输出主要关注使用到的最大空间与最小空间-gcpermcapacity输出永久代使用到的最大空间和最小空间-compiler输出JIT编译器编译过的方法,耗时等信息。-printcompilation输出已经被JIT编译的方法

        3.Configuration Info for Java(Jinfo)
            实时查看和调整虚拟机的各项参数。jps -v虚拟机启动时显式指定的参数列表,Jinfo参数的命令格式:jinfo [option] pid;

选项作用-flag未被显式指定的参数的系统默认值-sysprops把虚拟机进程的System.getProperties( )的内容打印出来-flag name=value修改一部分运行期可写的虚拟机参数值

        4.Memory Map for java(Jmap)
           用于生成堆转储快照(一般称为heapdump或dump文件)以及查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率,GC器等。Jmap的命令格式:jmap [option] pid。
                                          option选项如下

选项作用-dump生成Java堆转储快照,格式为-dump:[live,]format=b,file=<filename>,live参数说明是否只dump出存货对象-finalizerinfo显式在F-Queue中等待Finalizer线程执行finalize方法的对象,只在linux于solars平台有效-heap显式Java堆的详细信息,如参数配置,分代情况,哪种GC器,只在linux于solars平台有效-histo显示堆中对象统计信息,包括类,实例的数量和合计容量-permstat以ClassLoader为统计口径显示永久代内存状态-F当虚拟机进程对-dump选项无效时,可以使用这个强制生成dump快照

         5.JVM  Heap Analysis Tool(Jhat)
            Jhat搭配Jmap命令使用,用于分析jmap生成的堆存储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件与分析结果后,可以在浏览器中查看。一般不会使用jhat分析dump文件,原因如下:1.分析耗时而且消耗硬件资源;2.jhat分析功能比较简陋,不如VisualVM,IBM HeapAnalyzer等工具
       6.Stack Trace of Java(jstack)
          用于生成虚拟机当前时刻的线程快照(一般称为threadheap或javacore文件)。线程快照是当前虚拟机内部每一条正在执行的方法堆栈的集合。生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程死锁,死循环,请求外部资源导致长时间等待。jstack命令格式:
jstack [option] vmid

选项作用-F当正常输出请求不被响应时-l除堆栈外,显示关于锁的附加信息-m如果调用本地方法的话,可以显示c/c++的堆栈