1. 程式人生 > >Sun JDK監控和故障處理工具.

Sun JDK監控和故障處理工具.

一、測試環境

[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[[email protected] ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

二、常用工具

1.jps

jsp可以列出正在執行的虛擬機器程序,並顯示其執行主類(main函式所在的類)的名稱和程序ID。
jps的用法:
[[email protected] ~]# jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]
jps命令主要選項:
-q 只輸出程序ID的名稱,省略主類的名稱
-m 輸出虛擬機器程序啟動時傳遞給主類main()函式的引數
-l 輸出主類的命名,如果程序執行的是Jar包,則輸出Jar的路徑
-v 輸出虛擬機器程序啟動時JVM引數
示例:
[[email protected] ~]# jps -l
4310 sun.tools.jps.Jps
22336 org.apache.catalina.startup.Bootstrap

2.jstat

jstat是用於監視虛擬機器各種執行狀態資訊的命令列工具。它可以顯示本地或遠端虛擬機器程序中的類裝載、記憶體、垃圾收集、JIT編譯等執行狀況。在不能使用GUI圖形介面的情況下,它將是執行期定位虛擬機器問題的首選工具。

jstat用法:

[[email protected] ~]# jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as 
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.
jstat命令主要選項:
-class            監視類裝載、解除安裝數量、總空間及類裝載所耗費的時間
-gc               監視Java堆狀況,包括Eden區、2個survivor區、老年代、永久代等的容量、已用空間、GC時間等時間
-gccapacity       監視內容與-gc相同,輸出主要關注Java堆各個區域使用的最大空間和最小空間
-gcutil           監視內容與-gc基本相同,輸出主要關注已使用空間佔總空間的百分比
-gccause          與-gcutil功能一樣,但會額外輸出導致上一次GC產生的原因
-gcnew            監視新生代GC的狀況
-gcnewcapacity    監視內容與-gcnew基本相同,輸出主要關注使用到的最大空間和最小空間
-gcold            監視老年代GC的狀況
-gcoldcapacity    監視內容與-gcold基本相同,輸出主要關注使用的最大空間和最小空間
-gcpermcapacity   輸出永久代使用的最大空間和最小空間
-compiler         輸出JIT編譯器編譯過的方法、耗時等資訊
-printcompilation 輸出已經被JIT編譯的方法

示例:

[[email protected] ~]# jstat -gcutil 22336
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  0.00  20.31  87.14  76.26  44.72   1475    4.316     2    0.329    4.645

3.jinfo

jinfo命令的作用就是實時地檢視和調整虛擬機器的各項引數。jinfo可以使用-sysprops選項把虛擬機器程序的System.getProperties()的內容打印出來,並且還可以通過-flag選項查詢未被顯示指定的引數的系統預設值,jps -v只能檢視虛擬機器啟動時顯式指定的引數列表。同時,jinfo命令還能夠在執行期修改JVM引數,可以使用-flag[+|-]name或-flag name=value來修改一部分執行期可寫的虛擬機器引數值。

jinfo用法:

[[email protected] ~]# jinfo -help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [[email protected]]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message
示例:

[[email protected] ~]# jinfo -flag SurvivorRatio 22336
-XX:SurvivorRatio=8

4.jstack


5.jmap

6.btrace


7.JConsole


8.VisualVM