Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          監控與管理虛擬機

          Posted on 2009-12-21 20:51 啥都寫點 閱讀(394) 評論(0)  編輯  收藏 所屬分類: J2SE
               本例介紹如何監控和管理Java虛擬機,包括獲取Java虛擬機的內存使用情況、線程數、運行時間等。J2SE 5.0中使用Bean監控和管理Java虛擬機。

               java.lang.management.ManagementFactory是管理Bean的工廠類,通過它的get系列方法能夠獲得不同的管理Bean的實例。
               Java提供了如下幾個管理Bean:
                       java.lang.management.MemoryMXBean:該Bean用于管理Java虛擬機的內存系統。一個Java虛擬機具有一個實例。
                       java.lang.management.ClassLoadingMXBean:該Bean用于管理Java虛擬機的類加載系統。一個Java虛擬機具有一個實例。
                       java.lang.management.ThreadMXBean:該Bean用于管理Java虛擬機的線程系統。一個Java虛擬機具有一個實例。
                       java.lang.management.RuntimeMXBean:該Bean用于管理Java虛擬機的運行時系統。一個Java虛擬機具有一個實例。
                       java.lang.management.OperatingSystemMXBean:該Bean用于管理操作系統。一個Java虛擬機具有一個實例。
                       java.lang.management.CompilationMXBean:該Bean用于管理Java虛擬機的編譯系統。一個Java虛擬機具有一個實例。
                       java.lang.management.GarbageCollectorMXBean:該Bean用于管理Java虛擬機的垃圾回收系統。一個Java虛擬機具有一個或者多個實例。



          import java.lang.management.ClassLoadingMXBean;
          import java.lang.management.CompilationMXBean;
          import java.lang.management.GarbageCollectorMXBean;
          import java.lang.management.ManagementFactory;
          import java.lang.management.MemoryMXBean;
          import java.lang.management.OperatingSystemMXBean;
          import java.lang.management.RuntimeMXBean;
          import java.lang.management.ThreadMXBean;
          import java.util.List;

          /**
           * 用戶可以通過MXBean可以管理和監視虛擬機。
           
          */

          public class JDKMBean {

              
          /**
               * MemoryMXBean是Java 虛擬機的內存系統的管理接口 
               * Java 虛擬機具有此接口的實現類的單一實例
               
          */

              
          public static void printMemoryMXBean() {
                  
          // 獲得單一實例
                  MemoryMXBean instance = ManagementFactory.getMemoryMXBean();
                  System.out.printf(
          "%n---%s---%n", instance.getClass().getName());
                  
          // 返回用于對象分配的堆的當前內存使用量
                  System.out.printf("%s: %s%n""HeapMemoryUsage", instance
                          .getHeapMemoryUsage());
                  
          // 返回 Java 虛擬機使用的非堆內存的當前使用量
                  System.out.printf("%s: %s%n""getNonHeapMemoryUsage", instance
                          .getNonHeapMemoryUsage());
                  
          // 運行垃圾回收器
                  instance.gc();
              }


              
          /**
               * ClassLoadingMXBean是Java 虛擬機的類加載系統的管理接口 
               * Java 虛擬機具有此接口的實現類的單個實例
               
          */

              
          public static void printClassLoadingMXBean() {
                  
          // 獲得單一實例
                  ClassLoadingMXBean instance = ManagementFactory.getClassLoadingMXBean();
                  System.out.printf(
          "%n---%s---%n", instance.getClass().getName());
                  
          // 返回當前加載到 Java 虛擬機中的類的數量
                  System.out.printf("%s: %s%n""LoadedClassCount", instance
                          .getLoadedClassCount());
                  
          // 返回自 Java 虛擬機開始執行到目前已經加載的類的總數
                  System.out.printf("%s: %s%n""TotalLoadedClassCount", instance
                          .getTotalLoadedClassCount());
                  
          // 返回自 Java 虛擬機開始執行到目前已經卸載的類的總數
                  System.out.printf("%s: %s%n""UnloadedClassCount", instance
                          .getUnloadedClassCount());
              }


              
          /**
               * ThreadMXBean是Java 虛擬機線程系統的管理接口 
               * Java 虛擬機具有此接口的實現類的單個實例
               
          */

              
          public static void printThreadMXBean() {
                  
          // 獲得單一實例
                  ThreadMXBean instance = ManagementFactory.getThreadMXBean();
                  System.out.printf(
          "%n---%s---%n", instance.getClass().getName());
                  
          // 返回活動線程的當前數目,包括守護線程和非守護線程。
                  System.out.printf("%s: %s%n""ThreadCount", instance.getThreadCount());
                  
          // 返回活動線程 ID
                  System.out.printf("%s: %n""Thread IDs");
                  
          long[] ids = instance.getAllThreadIds();
                  
          for (long id : ids) {
                      System.out.printf(
          "%s;  ", id);
                  }

                  System.out.printf(
          "%n");
                  
          // 返回活動守護線程的當前數目
                  System.out.printf("%s: %s%n""DaemonThreadCount", instance
                          .getDaemonThreadCount());
                  
          // 返回自從 Java 虛擬機啟動或峰值重置以來峰值活動線程計數
                  System.out.printf("%s: %s%n""PeakThreadCount", instance
                          .getPeakThreadCount());
                  
          // 返回當前線程的總 CPU 時間
                  System.out.printf("%s: %s%n""CurrentThreadCpuTime", instance
                          .getCurrentThreadCpuTime());
                  
          // 返回當前線程在用戶模式中執行的 CPU 時間
                  System.out.printf("%s: %s%n""CurrentThreadUserTime", instance
                          .getCurrentThreadUserTime());
              }


              
          /**
               * RuntimeMXBean是Java 虛擬機的運行時系統的管理接口 
               * Java 虛擬機具有此接口的實現類的單個實例
               
          */

              
          public static void printRuntimeMXBean() {
                  
          // 獲得單一實例
                  RuntimeMXBean instance = ManagementFactory.getRuntimeMXBean();
                  System.out.printf(
          "%n---%s---%n", instance.getClass().getName());
                  
          // 返回由引導類加載器用于搜索類文件的引導類路徑
                  System.out.printf("%s: %s%n""BootClassPath", instance
                          .getBootClassPath());
                  
          // 返回系統類加載器用于搜索類文件的 Java 類路徑
                  System.out.printf("%s: %s%n""ClassPath", instance.getClassPath());
                  
          // 返回傳遞給 Java 虛擬機的輸入變量,其中不包括傳遞給 main 方法的變量
                  System.out.printf("%s%n""InputArguments");
                  List
          <String> args = instance.getInputArguments();
                  
          for (String arg : args) {
                      System.out.printf(
          "%s;  ", arg);
                  }

                  
          // 返回 Java 庫路徑
                  System.out.printf("%s: %s%n""LibraryPath", instance.getLibraryPath());
                  
          // 返回正在運行的 Java 虛擬機實現的管理接口的規范版本
                  System.out.printf("%s: %s%n""ManagementSpecVersion", instance
                          .getManagementSpecVersion());
                  
          // 返回表示正在運行的 Java 虛擬機的名稱
                  System.out.printf("%s: %s%n""Name", instance.getName());

                  
          // 返回 Java 虛擬機規范名稱
                  System.out.printf("%s: %s%n""SpecName", instance.getSpecName());
                  
          // 返回 Java 虛擬機規范供應商
                  System.out.printf("%s: %s%n""SpecVendor", instance.getSpecVendor());
                  
          // 返回 Java 虛擬機規范版本
                  System.out.printf("%s: %s%n""SpecVersion", instance.getSpecVersion());

                  
          // 返回 Java 虛擬機實現名稱
                  System.out.printf("%s: %s%n""VmName", instance.getVmName());
                  
          // 返回 Java 虛擬機實現供應商
                  System.out.printf("%s: %s%n""VmVendor", instance.getVmVendor());
                  
          // 返回 Java 虛擬機實現版本
                  System.out.printf("%s: %s%n""VmVersion", instance.getVmVersion());

                  
          // 返回 Java 虛擬機的啟動時間
                  System.out.printf("%s: %s%n""StartTime", instance.getStartTime());
                  
          // 返回 Java 虛擬機的正常運行時間
                  System.out.printf("%s: %s%n""Uptime", instance.getUptime());
              }


              
          /**
               * OperatingSystemMXBean是操作系統的管理接口 
               * Java 虛擬機具有此接口的實現類的單個實例
               
          */

              
          public static void printOperatingSystemMXBean() {
                  
          // 獲得單一實例
                  OperatingSystemMXBean instance = ManagementFactory
                          .getOperatingSystemMXBean();
                  System.out.printf(
          "%n---%s---%n", instance.getClass().getName());
                  
          // 返回操作系統的架構
                  System.out.printf("%s: %s%n""Arch", instance.getArch());
                  
          // 返回 Java 虛擬機可以使用的處理器數目
                  System.out.printf("%s: %s%n""AvailableProcessors", instance
                          .getAvailableProcessors());
                  
          // 返回操作系統名稱
                  System.out.printf("%s: %s%n""Name", instance.getName());
                  
          // 返回操作系統版本
                  System.out.printf("%s: %s%n""Version", instance.getVersion());
              }


              
          /**
               * CompilationMXBean是Java 虛擬機的編譯系統的管理接口 
               * Java 虛擬機具有此接口的實現類的單個實例
               
          */

              
          public static void printCompilationMXBean() {
                  
          // 獲得單一實例
                  CompilationMXBean instance = ManagementFactory.getCompilationMXBean();
                  System.out.printf(
          "%n---%s---%n", instance.getClass().getName());
                  
          // 返回即時 (JIT) 編譯器的名稱
                  System.out.printf("%s: %s%n""Name", instance.getName());
                  
          // 返回在編譯上花費的累積耗費時間的近似值
                  System.out.printf("%s: %s%n""TotalCompilationTime", instance
                          .getTotalCompilationTime());
              }


              
          /**
               * GarbageCollectorMXBean是Java 虛擬機的垃圾回收的管理接口 
               * Java 虛擬機可能具有此接口的實現類的一個或多個實例
               
          */

              
          public static void printGarbageCollectorMXBean() {
                  
          // 獲得所有實例
                  List<GarbageCollectorMXBean> instances = ManagementFactory
                          .getGarbageCollectorMXBeans();
                  System.out.printf(
          "%n---%s---%n", GarbageCollectorMXBean.class
                          .getName());
                  
          // 遍歷每個實例
                  for (GarbageCollectorMXBean instance : instances) {
                      
          // 返回垃圾收集器的名字
                      System.out.printf("***%s: %s***%n""Name", instance.getName());
                      
          // 返回已發生的回收的總次數
                      System.out.printf("%s: %s%n""CollectionCount", instance
                              .getCollectionCount());
                      
          // 返回近似的累積回收時間
                      System.out.printf("%s: %s%n""CollectionTime", instance
                              .getCollectionTime());
                  }

              }


              
          public static void main(String[] args) {
                  JDKMBean.printOperatingSystemMXBean();
                  JDKMBean.printRuntimeMXBean();
                  JDKMBean.printClassLoadingMXBean();
                  JDKMBean.printCompilationMXBean();
                  JDKMBean.printMemoryMXBean();
                  JDKMBean.printThreadMXBean();
                  JDKMBean.printGarbageCollectorMXBean();
              }

          }


           

                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 阿鲁科尔沁旗| 阿克苏市| 镇雄县| 西畴县| 兰坪| 潢川县| 海宁市| 南澳县| 寿阳县| 南陵县| 大厂| 铁岭县| 牡丹江市| 资中县| 甘孜县| 姚安县| 台南市| 化隆| 曲松县| 越西县| 汉中市| 罗山县| 杨浦区| 巴林右旗| 伊宁市| 宝丰县| 郎溪县| 鄂托克旗| 黎平县| 如皋市| 呼和浩特市| 会理县| 昌江| 潮安县| 呈贡县| 工布江达县| 博湖县| 扎兰屯市| 德兴市| 宣恩县| 安多县|