jstat命令並獲取JVM運行信息java
先來了解一下java.lang.management包的基本信息,提供管理接口,用於監視和管理 Java 虛擬機以及 Java 虛擬機在其上運行的操做系統。jvm
下面代碼就是使用了該軟件包的類,獲取當前運行的java程序的pid,而後運行jstat命令獲取jvm的運行信息,spa
package com.usoft.sort; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.management.ManagementFactory; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by xinxingegeya on 16/4/12. */ public class JstatMain { /** * S0 — Heap上的 Survivor space 0 區已使用空間的百分比 * S1 — Heap上的 Survivor space 1 區已使用空間的百分比 * E — Heap上的 Eden space 區已使用空間的百分比 * O — Heap上的 Old space 區已使用空間的百分比 * M — Metaspace區已使用空間的百分比 * CCS-Compressed class space capacity (kB) * YGC — 從應用程序啓動到採樣時發生 Young GC 的次數 * YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒) * FGC — 從應用程序啓動到採樣時發生 Full GC 的次數 * FGCT-從應用程序啓動到採樣時 Full GC 所用的時間(單位秒) * GCT — 從應用程序啓動到採樣時用於垃圾回收的總時間(單位秒) */ public static void main(String args[]) throws IOException { Map<String, Object> monitor = new HashMap<>(); List<String> statColumn = Arrays.asList("S0", "S1", "E", "O", "M", "CCS", "YGC", "YGCT", "FGC", "FGCT", "GCT"); String name = ManagementFactory.getRuntimeMXBean().getName(); System.out.println(name); String pid = name.substring(0, name.indexOf("@")); Process process = Runtime.getRuntime().exec("jstat -gcutil " + pid + " 5000"); //經過process拿到jstat命令的執行結果的輸入流 InputStreamReader isr = new InputStreamReader(process.getInputStream()); BufferedReader bufferedReader = new BufferedReader(isr); String line = null; while ((line = bufferedReader.readLine()) != null) { String[] stats = line.trim().split("[ ]+"); if (stats.length == statColumn.size()) { for (int i = 0; i < stats.length; i++) { monitor.put(statColumn.get(i), stats[i]); System.out.println(statColumn.get(i) + ":" + stats[i]); } System.out.println("====="); } } } }
運行結果,操作系統
1142@Yale-Li S0:S0 S1:S1 E:E O:O M:M CCS:CCS YGC:YGC YGCT:YGCT FGC:FGC FGCT:FGCT GCT:GCT ===== S0:0.00 S1:0.00 E:16.01 O:0.00 M:17.19 CCS:19.74 YGC:0 YGCT:0.000 FGC:0 FGCT:0.000 GCT:0.000 ===== S0:0.00 S1:0.00 E:16.01 O:0.00 M:17.19 CCS:19.74 YGC:0 YGCT:0.000 FGC:0 FGCT:0.000 GCT:0.000 =====
=========END=========code