JVM监控功能

该博客主要介绍了如何使用Java Management Extensions (JMX) API来获取JVM的各类监控数据,包括堆和非堆内存使用、类加载统计、垃圾收集信息、操作系统详情、运行时信息以及线程状态。通过这些信息,开发者可以在国庆后根据具体需求来定制JVM监控功能。
摘要由CSDN通过智能技术生成

临近国庆了,由于得知国庆放假回来要做一个jvm监控功能,具体要监控虚拟机哪些数据还不得知就提前整理下获取jvm各方面数据的api,先储存好,国庆之后具体需求下来去改动

package com.platform.modules.napoleon.utils;

import java.lang.management.*;
import java.util.List;
import java.util.Map;

public class JVMUtils {

    private static final long MB = 1048576L;

    public static void main(String[] args) {

        getClassLoadInfo();//类加载情况

        getMemoryInfo();//获取内存信息

        getGCInfo();//获取GC情况

        getSysInfo();//获取操作系统信息

        getRuntimeInfo();//获取运行时信息

        getThreadInfo();//获取线程信息
    }

    public static void getMemoryInfo() {

        MemoryMXBean bean = ManagementFactory.getMemoryMXBean();  // 返回 Java 虚拟机的内存系统的管理 Bean

        MemoryUsage hmu = bean.getHeapMemoryUsage();//对象分配的堆的当前内存使用量

        long init = hmu.getInit();//内存初始容量

        long used = hmu.getUsed();//已经使用的内存量(以字节为单位)

        long committed = hmu.getCommitted();//保证可以由 Java 虚拟机使用的内存量

        long max = hmu.getMax();//内存管理的最大内存量(以字节为单位)

        System.out.println("堆内存 初始容量:"+init + " 已使用:" +used + " JVM专享:" + committed + " 最大内存:" + max);  //返回 Java 虚拟机使用的非堆内存的当前内存使用量

        MemoryUsage nhmu = bean.getNonHeapMemoryUsage();

        long ninit = nhmu.getInit();//内存初始容量

        long nused = nhmu.getUsed();//已经使用的内存量(以字节为单位)

        long ncommitted = nhmu.getCommitted();//保证可以由 Java 虚拟机使用的内存量

        long nmax = nhmu.getMax();//内存管理的最大内存量(以字节为单位)

        System.out.println("非堆内存 初始容量:"+ninit + " 已使用:" +nused + " JVM专享:" + ncommitted + " 最大内存:" + nmax);
    }

    public static void getClassLoadInfo() {

        ClassLoadingMXBean bean = ManagementFactory.getClassLoadingMXBean();        //当前加载到 Java 虚拟机中的类的数量

        long loadedClassCount = bean.getLoadedClassCount();         //返回自 Java 虚拟机开始执行到目前已经加载的类的总数。

        long totalLoadedClassCount = bean.getTotalLoadedClassCount();        //返回自 Java 虚拟机开始执行到目前已经卸载的类的总数。

        long unloadedClassCount = bean.getUnloadedClassCount();

        System.out.println("类  当前加载数:" + loadedClassCount + " 加载总数:" + totalLoadedClassCount + " 卸载数:" + unloadedClassCount);
    }

    public static void getGCInfo() {
        List<GarbageCollectorMXBean> beans = ManagementFactory.getGarbageCollectorMXBeans(); // Java 虚拟机的垃圾回收
        for (GarbageCollectorMXBean bean : beans) {

            String gcName = bean.getName(); // 返回已发生的回收的总次数

            long loadedClassCount = bean.getCollectionCount();  // 返回近似的累积回收时间(以毫秒为单位)

            long totalLoadedClassCount = bean.getCollectionTime();

            System.out.println("GC :" + gcName + "  回收的总次数:" + loadedClassCount + " 累积回收时间:" + totalLoadedClassCount);
        }

    }

    public static void getSysInfo() {

        OperatingSystemMXBean bean = ManagementFactory.getOperatingSystemMXBean();

        String arch = bean.getArch();//返回操作系统

        int cpuNum = bean.getAvailableProcessors(); //返回 Java 虚拟机可以使用的处理器数目。

        String name = bean.getName();//返回操作系统名称

        String version = bean.getVersion();//返回操作系统的版本

        System.out.println("系统架构:"+arch+" 系统名称:"+name+"版本:"+version+" CPU:"+cpuNum);
    }

    public static void getThreadInfo() {

        ThreadMXBean bean = ManagementFactory.getThreadMXBean();

        long threadCount = bean.getThreadCount() ;//返回活动线程的当前数目,包括守护线程和非守护线程。

        long[] deadlockedThreads = bean.findDeadlockedThreads();//死锁状态的线程

        long peakThreadCount = bean.getPeakThreadCount();// 返回自从 Java 虚拟机启动或峰值重置以来峰值活动线程计数

        long totalStartedThreadCount = bean.getTotalStartedThreadCount();//返回自从 Java 虚拟机启动以来创建和启动的线程总数目。

        System.out.println("线程 线程数:"+threadCount+" 峰值活动线程数:"+peakThreadCount+" 总线程数:"+totalStartedThreadCount);//
    }

    public static void getRuntimeInfo() {

        System.out.println("运行时信息----------------");

        RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();

        String name = bean.getName();// 虚拟机名称

        String specName = bean.getSpecName();// 返回 Java 虚拟机规范名称。

        String specVendor = bean.getSpecVendor();// 返回 Java 虚拟机规范供应商。

        String specVersion = bean.getSpecVersion();// 返回 Java 虚拟机规范版本。

        String vmVersion = bean.getVmVersion();// Java 虚拟机实现版本

        String vmVendor = bean.getVmVendor(); // Java 虚拟机实现供应商。

        String vmName = bean.getVmName();// Java 虚拟机实现名称。

        System.out.println("虚拟机规范名称"+specName+" 虚拟机规范供应商"+specVendor+" 虚拟机规范版本"+specVersion    +" 虚拟机实现版本"+vmVersion+" 虚拟机实现供应商"+vmVendor+" 虚拟机实现名称"+vmName);

        long startTime = bean.getStartTime();// Java 虚拟机的启动时间(以毫秒为单位)

        long uptime = bean.getUptime(); // Java 虚拟机的正常运行时间(以毫秒为单位)

        System.out.println("虚拟机名称:" + name + " 启动时间:" + startTime + " 运行时间" + uptime);

        Map atts = bean.getSystemProperties();// 所有系统属性 名称和值的映射

        System.out.println("系统属性:" + atts.toString());
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值