JAVA獲取系統相關的信息

 

java使用java.lang.management監視和管理java虛擬機java

classLoadingMxBean             | 用於java虛擬機的類加載系統的管理接口 json

compilationMxBean               | 用於java虛擬機的編譯系統的管理接口jvm

garbafeCollectorMxBean       | 用於java虛擬機的垃圾回收的管理接口ui

MermoryManagerMxBean     | 內存管理器的管理接口spa

MemoryPoolMxBean             | 內存池的管理接口操作系統

OperatingSystemMxBean      | 用於操做系統的管理接口,java虛擬機在此操做系統上運行線程

RuntimeMxBean                     | java虛擬機的運行時系統的管理接口code

ThreadMxBean                       | java虛擬機線程系統的管理接口orm

package com.orderdish.qrcodecenter.jvm;

import com.alibaba.fastjson.JSON;
import com.orderdish.qrcodecenter.po.JVMStatusPo;
import com.orderdish.qrcodecenter.po.MemoryUsageMBPo;
import com.orderdish.qrcodecenter.v2.controller.CodeController;
import com.sun.management.OperatingSystemMXBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.RuntimeMXBean;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by futingting on 2018/6/11.
 * JAVA獲取系統相關的信息
 */
public class JVMStatusManager {

    private final Logger LOG = LoggerFactory.getLogger(CodeController.class);

    private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    private static int MBYTE = 1024 * 1024;

    private JVMStatusManager(){}

    //單例
    private static class InstanceHolder{
        static final JVMStatusManager INSTANCE = new JVMStatusManager();
    }

    public static JVMStatusManager getInstance(){
        return InstanceHolder.INSTANCE;
    }

    /*
       收集jvm的一些參數信息上報
     */
    public JVMStatusPo collectJVMStatus(){
        JVMStatusPo jvmStatusPo = new JVMStatusPo();
        //獲取JVM的啓動時間,版本及名稱,當前進程ID
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        jvmStatusPo.setJvmStartTime(simpleDateFormat.format(new Date(runtimeMXBean.getStartTime())));
        jvmStatusPo.setJvmVersion(runtimeMXBean.getVmVersion());
        jvmStatusPo.setJvmName(runtimeMXBean.getVmName());
        jvmStatusPo.setProcessId(runtimeMXBean.getName().split("@")[0]);

        //獲取JVM內存使用狀況,包括堆內存和非堆內存
        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
        jvmStatusPo.setNonHeapMemoryUsage(buileMemoryUsageMB(memoryMXBean.getNonHeapMemoryUsage()));
        jvmStatusPo.setHeapMemoryUsage(buileMemoryUsageMB(memoryMXBean.getHeapMemoryUsage()));

        //操做系統及硬件信息:系統名稱、版本,CPU內核,機器總內存、可用內存、可用內存佔比
        OperatingSystemMXBean operatingSystemMXBean =(OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
        jvmStatusPo.setOsName(operatingSystemMXBean.getName());
        jvmStatusPo.setOsVersion(operatingSystemMXBean.getVersion());
        jvmStatusPo.setProcessors(operatingSystemMXBean.getAvailableProcessors());
        jvmStatusPo.setTotalPhysicalMemory(operatingSystemMXBean.getTotalPhysicalMemorySize()/MBYTE);
        jvmStatusPo.setFreePhysicalMemory(operatingSystemMXBean.getFreePhysicalMemorySize()/MBYTE);

        DecimalFormat decimalFormat = new DecimalFormat("#0.00%");
        if(operatingSystemMXBean.getTotalPhysicalMemorySize() > 0){
            jvmStatusPo.setFreePhysicalMenoryRatio(decimalFormat.format(
                    Double.valueOf(operatingSystemMXBean.getFreePhysicalMemorySize()) /operatingSystemMXBean.getTotalPhysicalMemorySize()
            ));
        }
        String updateTime = simpleDateFormat.format(new Date());
        jvmStatusPo.setSystemUpTime(updateTime);
        LOG.info("====================jvmStatusPo info: \n"+ JSON.toJSONString(jvmStatusPo));
        return jvmStatusPo;
    }

    private MemoryUsageMBPo buileMemoryUsageMB(MemoryUsage memoryUsage){
        MemoryUsageMBPo memoryUsageMBPo = new MemoryUsageMBPo();
        memoryUsageMBPo.setInit(memoryUsage.getInit()/ MBYTE);
        memoryUsageMBPo.setCommitted(memoryUsage.getCommitted()/MBYTE);
        memoryUsageMBPo.setUsed(memoryUsageMBPo.getUsed()/MBYTE);
        memoryUsageMBPo.setMax(memoryUsageMBPo.getMax()/MBYTE);
        return memoryUsageMBPo;
    }

    public static void main(String[] args){
        JVMStatusManager instance = new JVMStatusManager();
        System.out.println(instance.collectJVMStatus());
    }
}

運行結果:接口

{
    "freePhysicalMemory":1625,
    "freePhysicalMenoryRatio":"19.95%",
    "heapMemoryUsage":{
        "committed":122,
        "init":127,
        "max":0,
        "used":0
    },
    "jvmName":"Java HotSpot(TM) 64-Bit Server VM",
    "jvmStartTime":"2018-06-11 12:07:26",
    "jvmVersion":"24.80-b11",
    "nonHeapMemoryUsage":{
        "committed":23,
        "init":23,
        "max":0,
        "used":0
    },
    "osName":"Windows 7",
    "osVersion":"6.1",
    "processId":"103360",
    "processors":4,
    "systemUpTime":"2018-06-11 12:07:27",
    "totalPhysicalMemory":8144
}
相關文章
相關標籤/搜索