java性能调优工具

一.  jps:显示当前用户的java进程的pid,进程的启动路径等.,jps的优点是能迅速的找到java相关的进程,缺点是只能查看 当前用户的java进程,查看系统上所有的java进程,还是得用ps -ef | grep java.

    常用参数示例:

    jps -l   输出应用程序main class的package名或者应用程序的jar文件路径名

     D:\>jps -l

        6064 test.jar

        4804 sun.tools.jps.Jps

     

      jps -v      输出应用程序启动的时候传递给JVM的参数

      D:\>jps -v

         6064 jar

         5336 Jps -Denv.class.path=.;D:\Program files\jdk1.6\lib; -Dapplication.home=D:\Program

         files\jdk1.6 -Xms8m

       更多参数及其含义:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html

 

二.  jstat.利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等.

       常用参数示例:

 

      D:\>jstat -gcutil 6064 10000 3       统计gc时,heap信息变化情况

      S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT

     97.93   0.00  26.39  86.29   2.95   26    0.153     4    0.465    0.618

     97.93   0.00  55.49  86.29   2.95   26    0.153     4    0.465    0.618

     97.93   0.00  84.59  86.29   2.95   26    0.153     4    0.465    0.618

 

         

       10000 代表多久间隔显示一次,

        3 代表显示多少次。

       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 — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

       更多参数及其含义:

        http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstat.html

 

.jstack: jstack可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现死锁的状态,jstack是非常有用的.

     D:\>jstack -l 5808 > jstack.log   打印出log会包含jvm运行的一些系统线程和用户的线程栈信息.

     下面截取部分用户线程的栈信息:

       "main" prio=6 tid=0x00549400 nid=0x163c waiting on condition [0x003bf000..0x003bfe30]

        java.lang.Thread.State: TIMED_WAITING (sleeping)

         at java.lang.Thread.sleep(Native Method)

         at com.ldh.GCTest.main(GCTest.java:12)

 

        Locked ownable synchronizers:

         - None

        从上面可以看出线程"main"的正在sleep

      

        D:\>jstack -m 5752 > jstack.log 不仅打印java栈信息,还会打印出通过jni调用的接口栈信息

         不过需要在linux执行才会有结果

       

        jvm常用线程,参见:http://blog.csdn.net/a43350860/article/details/8134234

        更多参数及其含义:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html

  

四. jmap: 打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量),以及Heap size, Perm size的大小等。

       通过在VM参数后加-XX:+HeapDumpOnOutOfMemoryError -

XX:HeapDumpPath=/home/admin/logs/java.hprof ,在内存溢的时候会dump内存快照及指定内存快照的存储文件.也可以通过命令行dump命令执行时的内存快照.

      示例如下: 

      D:\>jmap -dump:format=b,file=D:/dump.log 5752

           Dumping heap to D:\dump.log ...

           Heap dump file created

     D:/dump.log的内容是二进制的,直接打开查看是不行的,可以通过mat进行查看,

     mat的下载地址:http://www.eclipse.org/mat/.mat分析的内容非常详细.

 

五.jconsole:jconsole是jdk自带的一个内存分析工具,它提供了图形界面。可以查看到被监控的jvm的内存信息,线程信息,类加载信息,MBean等信息。在java的安装目录的bin目标下.

 

六.jvisualvm:   它不但提供了jconsole类似的功能,还提供了jvm内存和cpu实时诊断,还有手动dump出jvm内存情况,手动执行gc.

 

 

 

 

 

 

 

 

    

 

 

你可能感兴趣的:(jstack,jps,jstat,JMAP,.jvisualvm)