虛擬機學習之三:虛擬機性能監控與故障處理工具

1.JDK的命令行工具

jvm在jdk的bin目錄下試下了不少監控分析jvm運行狀況的命令行工具,這些工具都很小,大多數都是jdk/lib/tools.jar類庫的薄封裝。java

1.1 jps -> 虛擬機進程情況工具

jps:虛擬機進程狀態工具( JVM Process Status Tool)c++

jps命令格式:jps  [options]  [hostid]api

jps執行樣例:服務器

jps -q 只輸出本地虛擬機線程IDapp

C:\Users\Administrator>jps -q
5268
6052
1452

jps -m 輸出虛擬機進程啓動時傳遞給主類main()函數的參數。jvm

C:\Users\Administrator>jps -m
5268 PretenureSizeThresholdTest
6052
3404 Jps -m

jps -l 輸出主類的全名,若是進程執行的是jar包,輸出jar包路徑函數

C:\Users\Administrator>jps -l
5268 com.sean.esapi.client.PretenureSizeThresholdTest
6052
6476 sun.tools.jps.Jps

jps -v 輸出虛擬機啓動時jvm參數工具

C:\Users\Administrator>jps -v
6928 Jps -Denv.class.path=.;C:\Program Files\Java\jdk1.8.0_111\lib;C:\Program Files\Java\jdk1.8.0_111\lib\tools.jar -Dapplication.home=C:\Pr
ogram Files\Java\jdk1.8.0_111 -Xms8m
5268 PretenureSizeThresholdTest -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+UseSerialGC -XX:PretenureSi
zeThreshold=3145728 -Dfile.encoding=UTF-8
6052  -Dosgi.requiredJavaVersion=1.7 -XX:+UseG1GC -XX:+UseStringDeduplication -Dosgi.requiredJavaVersion=1.7 -Xms256m -Xmx1024m

注意:若是須要查看其餘機器上的jvm進程,須要在待查看機器上啓動jstatd。默認狀況下, jstatd 開啓在 1099 端口上開啓 RMI 服務器。ui

1.2 jstat -> 虛擬機統計信息監視工具

jstat 用於監視虛擬機各類運行狀態信息的命令行工具(JVM Statistics Monitoring Tool)。spa

jstat 命令格式:jstat [ option vmid [interval [s|ms] [count]] ]

參數interval  和 count 表示查詢間隔和次數。若是省略這兩個參數表示只查詢一次。

jstat 執行樣例:

jstat -gc 6800 250 10(查詢進程6800的垃圾收集情況,每隔250毫秒查詢一次,一共查詢10次)

C:\Users\Administrator>jstat -gc 6800 250 10
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4418    4.576 4418    19.624   24.200
1024.0 1024.0  0.0    0.0    8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4463    4.602 4463    19.874   24.476
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4509    4.632 4509    20.063   24.694
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4556    4.654 4556    20.243   24.898
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4598    4.680 4598    20.445   25.124
1024.0 1024.0  0.0    0.0    8192.0   2048.0   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4642    4.726 4641    20.602   25.329
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4687    4.779 4687    20.776   25.555
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4735    4.808 4735    20.971   25.779
1024.0 1024.0  0.0    0.0    8192.0   2048.0   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4778    4.846 4778    21.152   25.998
1024.0 1024.0  0.0    32.0   8192.0   7260.5   10240.0     8791.4   4864.0 2664.9 512.0  287.5    4818    4.877 4818    21.336   26.213

S0C:第一個Survivor區空間大小。

S1C:第二個Survivor區空間大小。

S0U:第一個Survivor區已使用內存大小。

S1U:第二個Survivor區已使用內存大小。

EC:Eden區空間大小。

EU:Eden區已使用內存大小。

OC:老年代空間大小。

OU:老年代已使用內存大小。

MC:Metaspace區域空間大小。

MU:Metaspace區域已使用內存大小。

CCSC:壓縮類空間大小。

CCSU:壓縮類空間使用大小。

YGC:年輕代垃圾回收次數。

YGCT:年輕代垃圾回收耗時。

FGC:full gc垃圾回收次數。

FGCT:full gc垃圾回收耗時。

GCT:垃圾回收總耗時。

jstat -gcutil 6784(輸出各個區域使用空間站總空間百分比)

C:\Users\Administrator>jstat -gcutil 6784
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00  25.00  85.85  54.79  56.15   3379    3.341  3378   14.542   17.883

jstat監視選項衆多,這裏不一一列舉。

1.3 jinfo -> java配置信息工具

jinfo 命令格式

jinfo [ option ] pid

更名了能夠實時查詢和調整虛擬機參數。

 -flag <name>   :輸出虛擬機對應參數配置的參數值。
 -flag [+|-]<name>   :新增或失效虛擬機對應參數的參數值。
 -flag <name>=<value> :配置虛擬機對應參數的參數值。
 -flags               :輸出虛擬機配置信息。
 -sysprops          :輸出虛擬機System.getProperties()的內容。
 <no option>     :輸出上面兩項的全部信息。

1.4 jmap:java內存映射工具

jmap (Memory Map for Java)命令用於生成堆轉儲快照(通常生成heapdump或dump文件)。jmap的做用不單單是爲了獲取dump文件,還能夠查詢finalize執行隊列、java堆和永久代的詳細信息。

命令格式:jamp [ option ] vmid

option:

-dump ->生成java堆轉儲快照。

-finalizerinfo ->顯示在F-Queue中等待finalizer線程執行finalize方法的對象。

-heap -> 顯示java堆詳細信息。

-histo ->顯示堆中對象統計信息。

-F -> 當虛擬機進程對-dump選項沒有響應時,可以使用這個選項強制生成快照。

如下例子,生成java堆轉儲快照,dump出進程9403的存活對象。

jmap -dump:live,format=b,file=kafka9403.dump 9403

生成kafka9403.dump文件。

1.5 jstack:java堆棧跟蹤工具

jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的緣由,如線程間死鎖、死循環、請求外部資源致使長時間等待等都是致使線程長時間停頓的常見緣由。

命令格式:jstack [ option ] vmid

選項:

-F ->當正常輸出的請求不被響應時,強制輸出線程堆棧。

-l ->除堆棧外,顯示關於鎖的附加信息。

-m ->若是調用到本地方法的話,能夠顯示c/c++的堆棧。

JDK中提供Thread.getAllStackTraces()獲取全部線程StackTraceElement對象,能夠獲取線程狀態。

for (Map.Entry<Thread,StackTraceElement[]> stackTrace : Thread.getAllStackTraces().entrySet()) {
			Thread thread = stackTrace.getKey();
			StackTraceElement[] stack = stackTrace.getValue();
			if(thread.equals(Thread.currentThread())){
				continue;
			}
			System.out.println("線程:"+thread.getName());
			
			for (StackTraceElement stackTraceElement : stack) {
				System.out.println(stackTraceElement);
			}
		}

2. JDK的可視化工具

2.1 JConsole:java監視與管理控制檯

概述、內存監控、線程監控

2.2 VisualVM:多合一故障處理工具

相關文章
相關標籤/搜索