jvm 自帶的監控工具


介紹  jvm 自帶的監控工具:


本對的JAVA進程的查看jps -lmv

JVM配置信息工具jinfo 4304

JVM堆棧跟蹤工具jstack 4304

JVM資源和性能實時監控:

jstat  -gcutil  輸出已使用空間佔總空間的百分比

      -gccapacity 輸出堆中各個區域使用到的最大和最小空間

jstat -gccapacity 4304 1s 5
jstat -gcutil 4304 1s 5


查看內存信息

jmap -dump:live,format=b,file=data1.hprof 4304
jhat data1.hprof

http://ip:7000





請確保java_home/bin配置到path環境變量下,因爲這些工具都在jdk的bin目錄下

圖形化工具 ctrl+R 命令行 輸入: jVisualVM 進入圖形化工具查看cpu 內存等等的消耗

jps(JVM Process Status Tool):JVM機進程狀況工具


用來查看基於HotSpot JVM裏面所有進程的具體狀態, 包括進程ID,進程啓動的路徑等等。與unix上的ps類似,用來顯示本地有權限的java進程,可以查看本地運行着幾個java程序,並顯示他們的進程號。使用jps時,不需要傳遞進程號做爲參數。
Jps也可以顯示遠程系統上的JAVA進程,這需要遠程服務上開啓了jstat服務,以及RMI注及服務,不過常用都是對本對的JAVA進程的查看。
命令格式:jps [ options ] [ hostid ]
常用參數說明:
-m 輸出傳遞給main方法的參數,如果是內嵌的JVM則輸出爲null。
-l 輸出應用程序主類的完整包名,或者是應用程序JAR文件的完整路徑。
-v 輸出傳給JVM的參數。

例如:


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\liu>jps -lmv
4868  -Dexe4j.semaphoreName=d:_program files (x86)_jetbrains_intellij idea 12.1.
7_bin_idea.exe -Dexe4j.moduleName=D:\Program Files (x86)\JetBrains\IntelliJ IDEA
 12.1.7\bin\idea.exe -Dexe4j.processCommFile=C:\Users\liu\AppData\Local\Temp\e4j
_p4868.tmp -Dexe4j.tempDir=C:\Users\liu\AppData\Local\Temp\e4jBF67.tmp_dir -Dexe
4j.unextractedPosition=558234 -Djava.library.path=D:\Program Files (x86)\JetBrai
ns\IntelliJ IDEA 12.1.7\bin\..\.\bin;C:\Program Files (x86)\Common Files\NetSara
ng;E:\project\arachne\web\trunk\muri_gm;E:\project\arachne\web\trunk\muri_im;C:\
Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\Windows
PowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program
Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;D:\Program Files\Java\jdk1.7.0_07\bin;D
:\Program Files\Java\jdk1.7.0_07\jre\bin;D:\Program Files\apache-maven-3.0.4-bin
\apache-maven-3.0.4\bin;E:\project\arachne\web\trunk\muri_7z;E:\project\arachne\
web\trunk\colorWIN;D:\Program Files\TortoiseSVN\bin;C:\Python33;E:\pro
2816 org.jetbrains.idea.maven.server.RemoteMavenServer -Djava.awt.headless=true
-Xmx512m -Dfile.encoding=GBK
4304 com.muri.web.common.Booter -agentlib:jdwp=transport=dt_socket,address=127.0
.0.1:58490,suspend=y,server=n -Dfile.encoding=UTF-8
9432 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\Program Files\Java\jdk1.7.0_07
lib\dt.jar;D:\Program Files\Java\jdk1.7.0_07lib\tools.jar;D:\Program Files\Java\
jdk1.7.0_07bin  -Dapplication.home=D:\Program Files\Java\jdk1.7.0_07 -Xms8m



其中4848爲我的IDE的進程,2816爲maven進程,4304爲我的測試程序的進程,9432爲jps自己的進程



jinfo(Configuration Info for Java):JVM配置信息工具

 

可以輸出並修改運行時的java 進程的opts。用處比較簡單,用於輸出JAVA系統參數及命令行參數

命令格式:jinfo [ options ] [ pid ]

常用參數說明:

-flag  輸出,修改,JVM命令行參數

例如:

?
1
2
3
4
5
6
7
8
C:\Users\liu>jinfo 4304
Attaching to process ID 4304, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 23.3-b01
Java System Properties:
.......
.......



Jstack(Stack Trace for Java):JVM堆棧跟蹤工具

jstack用於打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64“

命令格式:jstack [ option ] pid

常用參數說明:

-F 當’jstack [-l] pid’沒有相應的時候強制打印棧信息

-l  長列表. 打印關於鎖的附加信息,例如屬於java.util.concurrent的ownable synchronizers列表.

-m 打印java和native c/c++框架的所有棧信息.

-h | -help打印幫助信息

 例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\liu>jstack 4304
2014-09-12 10:22:42
Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.3-b01 mixed mode):
 
"QuartzScheduler_scheduler-NON_CLUSTERED_MisfireHandler"prio=6 tid=0x0000000012
d17800 nid=0x21d0 waiting on condition [0x000000001db7f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobSt
oreSupport.java:3963)
......
......



jstat(JVM statistics Monitoriing Tool):JVM統計信息監視工具


對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控
命令格式:jstat [ option  pid [interval [ s | ms ] [count] ] ] 
常用參數說明:
     -gcutil  輸出已使用空間佔總空間的百分比
     -gccapacity 輸出堆中各個區域使用到的最大和最小空間

 例如:每隔1秒監控jvm內存一次,共監控5次

?
1
2
3
4
5
6
7
8
9
10
11
12
13
C:\Users\liu>jstat -gccapacity 4304 1s 5
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC
       OC      PGCMN    PGCMX     PGC       PC     YGC    FGC
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1



?
1
2
3
4
5
6
7
C:\Users\liu>jstat -gcutil 4304 1s 5
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00  73.56  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435



一些術語的中文解釋:

         S0C:年輕代中第一個survivor(倖存區)的容量 (字節)
         S1C:年輕代中第二個survivor(倖存區)的容量 (字節)
         S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (字節)
         S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (字節)
           EC:年輕代中Eden(伊甸園)的容量 (字節)
           EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
           OC:Old代的容量 (字節)
           OU:Old代目前已使用空間 (字節)
           PC:Perm(持久代)的容量 (字節)
           PU:Perm(持久代)目前已使用空間 (字節)
         YGC:從應用程序啓動到採樣時年輕代中gc次數
       YGCT:從應用程序啓動到採樣時年輕代中gc所用時間(s)
         FGC:從應用程序啓動到採樣時old代(全gc)gc次數
       FGCT:從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
         GCT:從應用程序啓動到採樣時gc用的總時間(s)

    NGCMN:年輕代(young)中初始化(最小)的大小 (字節)

    NGCMX:年輕代(young)的最大容量 (字節)

        NGC:年輕代(young)中當前的容量 (字節)

   OGCMN:old代中初始化(最小)的大小 (字節) 

   OGCMX:old代的最大容量 (字節)

       OGC:old代當前新生成的容量 (字節)

   PGCMN:perm代中初始化(最小)的大小 (字節) 

   PGCMX:perm代的最大容量 (字節)   

       PGC:perm代當前新生成的容量 (字節)

          S0:年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比

         S1:年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比

           E:年輕代中Eden(伊甸園)已使用的佔當前容量百分比

           O:old代已使用的佔當前容量百分比

           P:perm代已使用的佔當前容量百分比

  S0CMX:年輕代中第一個survivor(倖存區)的最大容量 (字節)

 S1CMX :年輕代中第二個survivor(倖存區)的最大容量 (字節)

    ECMX:年輕代中Eden(伊甸園)的最大容量 (字節)

       DSS:當前需要survivor(倖存區)的容量 (字節)(Eden區已滿)

          TT: 持有次數限制

       MTT : 最大持有次數限制

jmap( Memory Map for Java):JVM內存映像工具


打印出某個java進程(使用pid)內存內的所有‘對象’的情況(如:產生那些對象,及其數量)
命令格式:jmap [ option ] pid
常用參數說明:
        -dump:[live,]format=b,file=<filename> 使用二進制形式輸出jvm的heap內容到文件中, live子選項是可選的,假如指定live選項,那麼只輸出活的對象到文件. 
        -histo[:live] 打印每個class的實例數目,內存佔用,類全名信息. VM的內部類名字開頭會加上前綴”*”. 如果live子參數加上後,只統計活的對象數量. 
        -F 強迫.在pid沒有相應的時候使用-dump或者-histo參數. 在這個模式下,live子參數無效. 

例如:以二進制形式輸入當前堆內存映像到文件data.hprof中

?
1
2
3
C:\Users\liu>jmap -dump:live,format=b,file=data1.hprof 4304
Dumping heap to C:\Users\liu\data1.hprof ...
Heap dump filecreated



生成的文件可以使用jhat工具進行分析,在OOM(內存溢出)時,分析大對象,非常有用
通過使用如下參數啓動JVM,也可以獲取到dump文件:
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath=./java_pid<pid>.hprof

      在jvm發生內存溢出時生成內存映像文件

jhat(JVM Heap Analysis Tool):JVM堆轉儲快照分析工具


用於對JAVA heap進行離線分析的工具,他可以對不同虛擬機中導出的heap信息文件進行分析,如LINUX上導出的文件可以拿到WINDOWS上進行分析,可以查找諸如內存方面的問題。
命令格式:jhat dumpfile(jmap生成的文件)

例如:分析jmap導出的內存映像

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\liu>jhat data1.hprof
Reading from data1.hprof...
Dumpfilecreated Fri Sep 12 10:27:25 CST 2014
Snapshotread, resolving...
Resolving 879257 objects...
Chasing references, expect 175 dots............................................
...............................................................................
..................................................
Eliminating duplicate references...............................................
...............................................................................
...............................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.



執行成功後,訪問 http://localhost:7000 即可查看內存信息,

MAT(Memory Analyzer Tool):一個基於Eclipse的內存分析工具


官網: http://www.eclipse.org/mat/
update:http://download.eclipse.org/mat/1.2/update-site/

這是eclipse的一個插件,安裝後可以打開xxx.hprof文件,進行分析,比jhat更方便使用,有些時候由於線上xxx.hprof文件過大,直接使用jhat進行初步分析了,可以的話拷貝到本地分析效果更佳。

 

圖形化監控工具:

 

在JDK安裝目錄bin下面有兩個可視化監控工具
1. JConsole(Java Monitoring and Management Console) 基於JMX的可視化管理工具。
2. VisualVM(All-in-one Java Troubleshooting Tool)隨JDK發佈的最強大的運行監視和故障處理程序。
推薦使用VisualVM,他有很多插件,可以更方便的監控運行時JVM

轉自: http://aub.iteye.com/blog/1873224
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章