溫故知新03-ManagementFactory獲取JVM以及OS信息

jdk文檔上描述ManagementFactory:

ManagementFactory類是用于獲取Java平臺的受管Bean的工廠類蒋川。 該類由靜態(tài)方法組成惶翻,每個方法返回一個或多個表示Java虛擬機組件的管理接口的平臺MXBeans 

一苹支、打印系統(tǒng)信息
代碼:

public static void main(String[] args) throws Exception {
        ManagementFactoryTest managementFactoryTest = new ManagementFactoryTest();
        Method method = ManagementFactoryTest.class.getMethod("printSystemInfo");
        method.invoke(managementFactoryTest);
    }

    public void printSystemInfo() {
        System.out.println("打印系統(tǒng)信息-----------");
        OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
        System.out.println("返回最后一分鐘的系統(tǒng)負載平均值:" + operatingSystemMXBean.getSystemLoadAverage());
        System.out.println("返回操作系統(tǒng)版本:" + operatingSystemMXBean.getVersion());
        System.out.println("返回操作系統(tǒng)架構:" + operatingSystemMXBean.getArch());
        System.out.println("返回操作系統(tǒng)名稱:" + operatingSystemMXBean.getName());
        System.out.println("返回可用于Java虛擬機的處理器數(shù)量:" + operatingSystemMXBean.getAvailableProcessors());
    }

輸出信息:

打印系統(tǒng)信息-----------
Disconnected from the target VM, address: '127.0.0.1:54855', transport: 'socket'
返回最后一分鐘的系統(tǒng)負載平均值:2.84033203125
返回操作系統(tǒng)版本:10.13.6
返回操作系統(tǒng)架構:x86_64
返回操作系統(tǒng)名稱:Mac OS X
返回可用于Java虛擬機的處理器數(shù)量:4

二嗜历、打印Java虛擬機編譯系統(tǒng)信息
代碼:

public static void main(String[] args) throws Exception {
        ManagementFactoryTest managementFactoryTest = new ManagementFactoryTest();
        Method method = ManagementFactoryTest.class.getMethod("printCompilationInfo");
        method.invoke(managementFactoryTest);
    }

    public void printCompilationInfo() {
        System.out.println("打印Java虛擬機編譯系統(tǒng)信息-----------");
        CompilationMXBean compilationMXBean = ManagementFactory.getCompilationMXBean();
        System.out.println("返回即時(JIT)編譯器的名稱:" + compilationMXBean.getName());
        System.out.println("返回在編譯中花費的大概累積的經(jīng)過時間(以毫秒為單位):" + compilationMXBean.getTotalCompilationTime());
        System.out.println("測試Java虛擬機是否支持對編譯時間的監(jiān)視:" + compilationMXBean.isCompilationTimeMonitoringSupported());
    }

運行結果:

打印Java虛擬機編譯系統(tǒng)信息-----------
Disconnected from the target VM, address: '127.0.0.1:58858', transport: 'socket'
返回即時(JIT)編譯器的名稱:HotSpot 64-Bit Tiered Compilers
返回在編譯中花費的大概累積的經(jīng)過時間(以毫秒為單位):41
測試Java虛擬機是否支持對編譯時間的監(jiān)視:true

三赊时、輸出內存信息
代碼:

public static void main(String[] args) throws Exception {
        ManagementFactoryTest managementFactoryTest = new ManagementFactoryTest();
        Method method = ManagementFactoryTest.class.getMethod("printMemoryInfo");
        method.invoke(managementFactoryTest);
    }

    public void printMemoryInfo() {
        System.out.println("打印Java內存系統(tǒng)信息-----------");
        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
        System.out.println("測試是否啟用了內存系統(tǒng)的詳細輸出:" + memoryMXBean.isVerbose());
        System.out.println("返回正在等待完成的對象的大致數(shù)量:" + memoryMXBean.getObjectPendingFinalizationCount());
        System.out.println("返回用于對象分配的堆的當前內存使用情況:" + memoryMXBean.getHeapMemoryUsage());
        System.out.println("返回Java虛擬機使用的非堆內存的當前內存使用情況:" + memoryMXBean.getNonHeapMemoryUsage());
    }

運行結果:

打印Java內存系統(tǒng)信息-----------
測試是否啟用了內存系統(tǒng)的詳細輸出:false
返回正在等待完成的對象的大致數(shù)量:0
返回用于對象分配的堆的當前內存使用情況:init = 134217728(131072K) used = 5497296(5368K) committed = 128974848(125952K) max = 1908932608(1864192K)
返回Java虛擬機使用的非堆內存的當前內存使用情況:init = 2555904(2496K) used = 4966400(4850K) committed = 8060928(7872K) max = -1(-1K)

四吨铸、獲取運行時信息
代碼:

public static void main(String[] args) throws Exception {
        ManagementFactoryTest managementFactoryTest = new ManagementFactoryTest();
        Method method = ManagementFactoryTest.class.getMethod("printRuntimeInfo");
        method.invoke(managementFactoryTest);
    }

    public void printRuntimeInfo() {
        System.out.println("打印Java運行時信息-----------");
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        System.out.println("返回bootstrap類加載器用于搜索類文件的引導類路徑:" + runtimeMXBean.getBootClassPath());
        System.out.println("返回系統(tǒng)類加載器用于搜索類文件的Java類路徑" + runtimeMXBean.getClassPath());
        System.out.println("返回表示正在運行的Java虛擬機的名稱" + runtimeMXBean.getName());
        System.out.println("返回Java虛擬機規(guī)范名稱" + runtimeMXBean.getSpecName());
        System.out.println("返回Java虛擬機規(guī)范供應商" + runtimeMXBean.getSpecVendor());
        System.out.println("返回Java虛擬機實現(xiàn)名稱" + runtimeMXBean.getVmName());
    }

運行結果:

打印Java運行時信息-----------
返回bootstrap類加載器用于搜索類文件的引導類路徑:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/classes:/Users/apple/Library/Caches/IntelliJIdea2018.2/captureAgent/debugger-agent-storage.jar
返回系統(tǒng)類加載器用于搜索類文件的Java類路徑/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/tools.jar:/Users/apple/IdeaProjects/maven_project/cz-parent/cz-consumer/target/classes:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot-starter-web/2.1.0.RELEASE/spring-boot-starter-web-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot-starter/2.1.0.RELEASE/spring-boot-starter-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot/2.1.0.RELEASE/spring-boot-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot-autoconfigure/2.1.0.RELEASE/spring-boot-autoconfigure-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot-starter-logging/2.1.0.RELEASE/spring-boot-starter-logging-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Applications/Java/Apache/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Applications/Java/Apache/repository/org/apache/logging/log4j/log4j-to-slf4j/2.11.1/log4j-to-slf4j-2.11.1.jar:/Applications/Java/Apache/repository/org/apache/logging/log4j/log4j-api/2.11.1/log4j-api-2.11.1.jar:/Applications/Java/Apache/repository/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar:/Applications/Java/Apache/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar:/Applications/Java/Apache/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot-starter-json/2.1.0.RELEASE/spring-boot-starter-json-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/com/fasterxml/jackson/core/jackson-databind/2.9.7/jackson-databind-2.9.7.jar:/Applications/Java/Apache/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar:/Applications/Java/Apache/repository/com/fasterxml/jackson/core/jackson-core/2.9.7/jackson-core-2.9.7.jar:/Applications/Java/Apache/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.7/jackson-datatype-jdk8-2.9.7.jar:/Applications/Java/Apache/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.7/jackson-datatype-jsr310-2.9.7.jar:/Applications/Java/Apache/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.7/jackson-module-parameter-names-2.9.7.jar:/Applications/Java/Apache/repository/org/springframework/boot/spring-boot-starter-tomcat/2.1.0.RELEASE/spring-boot-starter-tomcat-2.1.0.RELEASE.jar:/Applications/Java/Apache/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.12/tomcat-embed-core-9.0.12.jar:/Applications/Java/Apache/repository/org/apache/tomcat/embed/tomcat-embed-el/9.0.12/tomcat-embed-el-9.0.12.jar:/Applications/Java/Apache/repository/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.12/tomcat-embed-websocket-9.0.12.jar:/Applications/Java/Apache/repository/org/hibernate/validator/hibernate-validator/6.0.13.Final/hibernate-validator-6.0.13.Final.jar:/Applications/Java/Apache/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar:/Applications/Java/Apache/repository/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar:/Applications/Java/Apache/repository/com/fasterxml/classmate/1.4.0/classmate-1.4.0.jar:/Applications/Java/Apache/repository/org/springframework/spring-web/5.1.2.RELEASE/spring-web-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/spring-beans/5.1.2.RELEASE/spring-beans-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/spring-webmvc/5.1.2.RELEASE/spring-webmvc-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/spring-aop/5.1.2.RELEASE/spring-aop-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/spring-context/5.1.2.RELEASE/spring-context-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/spring-expression/5.1.2.RELEASE/spring-expression-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:/Applications/Java/Apache/repository/org/springframework/spring-core/5.1.2.RELEASE/spring-core-5.1.2.RELEASE.jar:/Applications/Java/Apache/repository/org/springframework/spring-jcl/5.1.2.RELEASE/spring-jcl-5.1.2.RELEASE.jar:/Users/apple/IdeaProjects/maven_project/cz-parent/cz-api/target/classes:/Applications/Java/Apache/repository/com/alibaba/boot/dubbo-spring-boot-starter/0.2.0/dubbo-spring-boot-starter-0.2.0.jar:/Applications/Java/Apache/repository/com/alibaba/dubbo/2.6.2/dubbo-2.6.2.jar:/Applications/Java/Apache/repository/org/javassist/javassist/3.20.0-GA/javassist-3.20.0-GA.jar:/Applications/Java/Apache/repository/org/jboss/netty/netty/3.2.5.Final/netty-3.2.5.Final.jar:/Applications/Java/Apache/repository/org/apache/zookeeper/zookeeper/3.4.9/zookeeper-3.4.9.jar:/Applications/Java/Apache/repository/jline/jline/0.9.94/jline-0.9.94.jar:/Applications/Java/Apache/repository/io/netty/netty/3.10.5.Final/netty-3.10.5.Final.jar:/Applications/Java/Apache/repository/org/apache/curator/curator-framework/2.12.0/curator-framework-2.12.0.jar:/Applications/Java/Apache/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar:/Applications/Java/Apache/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar:/Applications/Java/Apache/repository/com/alibaba/boot/dubbo-spring-boot-autoconfigure/0.2.0/dubbo-spring-boot-autoconfigure-0.2.0.jar:/Applications/Java/install/IntelliJ IDEA.app/Contents/lib/idea_rt.jar:/Users/apple/Library/Caches/IntelliJIdea2018.2/captureAgent/debugger-agent.jar
返回表示正在運行的Java虛擬機的名稱866@juans.local
返回Java虛擬機規(guī)范名稱Java Virtual Machine Specification
返回Java虛擬機規(guī)范供應商Oracle Corporation
返回Java虛擬機實現(xiàn)名稱Java HotSpot(TM) 64-Bit Server VM

五、Dubbo中獲取cpu可利用率的示例

public class LoadStatusChecker implements StatusChecker {
    public LoadStatusChecker() {
    }

    public Status check() {
        OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();

        double load;
        try {
            Method method = OperatingSystemMXBean.class.getMethod("getSystemLoadAverage");
            load = (Double)method.invoke(operatingSystemMXBean);
        } catch (Throwable var5) {
            load = -1.0D;
        }

        int cpu = operatingSystemMXBean.getAvailableProcessors();
        return new Status(load < 0.0D ? Level.UNKNOWN : (load < (double)cpu ? Level.OK : Level.WARN), (load < 0.0D ? "" : "load:" + load + ",") + "cpu:" + cpu);
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末祖秒,一起剝皮案震驚了整個濱河市诞吱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竭缝,老刑警劉巖房维,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抬纸,居然都是意外死亡咙俩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阿趁,“玉大人膜蛔,你說我怎么就攤上這事〔闭螅” “怎么了皂股?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長命黔。 經(jīng)常有香客問我呜呐,道長,這世上最難降的妖魔是什么悍募? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任卵史,我火速辦了婚禮,結果婚禮上搜立,老公的妹妹穿的比我還像新娘以躯。我一直安慰自己,他們只是感情好啄踊,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布忧设。 她就那樣靜靜地躺著,像睡著了一般颠通。 火紅的嫁衣襯著肌膚如雪址晕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天顿锰,我揣著相機與錄音谨垃,去河邊找鬼。 笑死硼控,一個胖子當著我的面吹牛刘陶,可吹牛的內容都是我干的。 我是一名探鬼主播牢撼,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匙隔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熏版?” 一聲冷哼從身側響起纷责,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撼短,沒想到半個月后再膳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡曲横,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年喂柒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡胳喷,死狀恐怖湃番,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情吭露,我是刑警寧澤吠撮,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站讲竿,受9級特大地震影響泥兰,放射性物質發(fā)生泄漏。R本人自食惡果不足惜题禀,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一鞋诗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迈嘹,春花似錦削彬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至神僵,卻和暖如春雁刷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背保礼。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工沛励, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炮障。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓目派,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铝阐。 傳聞我的和親對象是個殘疾皇子址貌,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容