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 }