3.虚拟机性能监控和故障处理工具

来源:互联网 发布:骚男淘宝服装网址 编辑:程序博客网 时间:2024/05/22 17:11
     给一个系统问题定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore)、堆转储快照(headdump/hprof)等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据和定位解决问题的速度。
JDK的命令行工具
     jdk的命令行工具都放置在jdk/bin目录下,其中包括了我们很熟悉的java、javac等工具。这些工具大多都是jdk/lib/tools.jar类库的一层包装而已,它们真正的主要功能都是在tools类库中实现的。下面将介绍几个常用的虚拟机监控工具。
jps: JVM Process Status Tool ,显示指定系统内所有的HotSpot虚拟机进程
     可以列出正在运行的虚拟机进程,并显示虚拟机执行主类的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。虽然功能单一,但是它是使用最频繁的工具。LVMID与系统中的进程ID(PID)是一样的。
      命令格式:jps [option] [hostid]
      执行样例:C:\Documents and Settings\Administrator>jps -lmv
2968  -Xmx536870912
6576 sun.tools.jps.Jps -lmv -Dapplication.home=C:\Program Files\Java\jdk1.6.0_12 -Xms8m
6820 D:\Dev\KEmulator\KEmulator.jar -jar D:\Hyang\eclipseWorkspase\kingClient\ant\out-put\v1.33.1314\0000010000\003\1\dwsg_java_full0424.jar
jstat: JVM Statistics Monitoring Tool, 用于收集HotSpot虚拟机各方面的运行数据
      是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供纯文本控制台环境的服务器上,它是将运行期定位虚拟机性能问题的首选工具。
      命令格式:jstat [option vmid [interval [s|ms] [count]] ]
      执行样例:C:\Documents and Settings\Administrator>jstat -gc 6820 1000 3
      指令参考地址:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
jinfo: Configuration Info for Java , 显示虚拟机配置信息
      jinfo的作用是实时地查看和调整虚拟机的各项参数。使用jps命令的-v参数可以查看虚拟机启动时显示指定的参数列表,但是如果你要想指定未被显示指定的默认参数,只能使用jinfo的-flag选项进行查询。在JDK1.6之后,jinfo还加入了运行期修改参数的能力,可以使用-flag [+|-] name 或者 -flag name=value。
     命令格式:jinfo [option] pid
     执行样例:C:\Documents and Settings\Administrator>jinfo -flag CMSInitiatingOccupancyFraction 6820
-XX:CMSInitiatingOccupancyFraction=-1
     指令参考地址:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jinfo.html
jmap: Memeory Map for Java, 生成虚拟机的内存转储快照(headdump文件)
     jmap一般用于生成堆转储快照。当然jmap的作用也不仅仅是为了获取dump文件,它还可以查询finalize执行队列,Java堆和永久代得详细信息,如空间使用率、当前使用收集器等。
      命令格式:jmap [option] vmid
      执行样例:C:\Documents and Settings\Administrator>jmap -dump:format=b,file=huangyDump.bin
6820
Dumping heap to C:\Documents and Settings\Administrator\huangyDump.bin ...
Heap dump file created
      指令参考地址:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
jhat: JVM Heap Dump Browse, 用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
      JDK提供jhat命令与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中键入http://localhost:7000/查看分析结果。不过一般不会使用jhat来分析结果,因为这会消耗大量的服务器硬件资源。
     执行样例:C:\Documents and Settings\Administrator>jhat huangyDump.bin
Reading from huangyDump.bin...
Dump file created Wed Apr 25 00:06:23 CST 2012
Snapshot read, resolving...
Resolving 105093 objects...
Chasing references, expect 21 dots.....................
Eliminating duplicate references.....................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
       执行过后在浏览器查看分析结果。
jstack: Stack Trace for Java,显示虚拟机的线程快照
      线程快照就是当前虚拟机每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因。
      命令格式:jstack [option] vmid
      执行样例:C:\Documents and Settings\Administrator>jstack -l 6820
2012-04-25 00:12:34
Full thread dump Java HotSpot(TM) Client VM (11.2-b01 mixed mode, sharing):

"Thread-9" prio=2 tid=0x03042800 nid=0x19ec waiting on condition [0x0486f000..0x
0486fb14]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at main.a.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:619)

   Locked ownable synchronizers:
        - None
        指令参考地址:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstack.html
原创粉丝点击