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 }