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
}