使用JMX监控VM的一个例子

package com.wonder;

import java.lang.management.ClassLoadingMXBean;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.RuntimeMXBean;
import java.util.List;

public class TestMain extends Thread {

 RuntimeMXBean mxbean;

 private void setFactory() {
  mxbean = ManagementFactory.getRuntimeMXBean();
  // 以下是取得虚拟机的属性
  System.out.println("===============虚拟机信息===================");
  System.out.println("虚拟机提供商:" + mxbean.getVmVendor());
  System.out.println("虚拟机名称:" + mxbean.getVmName());
  System.out.println("当前类路径:" + mxbean.getClassPath());
  System.out.println("进程号@机器:" + mxbean.getName());
  System.out.println("运行时间(毫秒):" + mxbean.getUptime());

  // 类管理接口
  System.out.println("===============类加载信息===================");
  ClassLoadingMXBean aClassLoadingMXBean = ManagementFactory
    .getClassLoadingMXBean();
  System.out.println("已加载类总数:"
    + aClassLoadingMXBean.getLoadedClassCount());
  System.out.println("Verbose状态:" + aClassLoadingMXBean.isVerbose());

  // 内存管理接口
  System.out.println("===============内存信息=====================");
  MemoryMXBean aMemoryMXBean = ManagementFactory.getMemoryMXBean();
  System.out.println("终止被挂起数:"
    + aMemoryMXBean.getObjectPendingFinalizationCount());// 返回其终止被挂起的对象的近似数目
  // 返回 Java 虚拟机使用的非堆内存的当前使用量
  MemoryUsage aMemoryUsage = aMemoryMXBean.getNonHeapMemoryUsage(); // 虚拟机启动时从系统得到的内存(以字节为单位)
  System.out.println("虚拟机启动时从系统得到的内存:" + aMemoryUsage.getInit()); // 表示当前已经使用的内存量(以字节为单位)
  System.out.println("当前已经使用的内存量:" + aMemoryUsage.getUsed()); // 表示保证可以由
  // Java
  // 虚拟机使用的内存量(以字节为单位)

  System.out.println("虚拟机使用的内存量:" + aMemoryUsage.getCommitted()); // 表示可以用于内存管理的最大内存量(以字节为单位)
  System.out.println("内存管理的初始内存量:" + aMemoryUsage.getInit());
  System.out.println("内存管理的最大内存量:" + aMemoryUsage.getMax());
  System.out.println("总体描述:" + aMemoryUsage.toString());
  
  List<GarbageCollectorMXBean> aGCMXBeans = ManagementFactory.getGarbageCollectorMXBeans();
  GarbageCollectorMXBean aGCMXBean = aGCMXBeans.get(0);
  System.out.println("===============GC信息=====================");
  System.out.println("收集总数:" + aGCMXBean.getCollectionCount());
  System.out.println("收集时间:" + aGCMXBean.getCollectionTime());
  System.out.println("内存管理器有效:" + aGCMXBean.isValid());
  System.out.println("内存池名:" + aGCMXBean.getMemoryPoolNames()[0]);
  System.out.println("内存池名:" + aGCMXBean.getMemoryPoolNames()[1]);
  
  
  System.out.println("*****************End**********************");
 }

 public void run() {
  try {
   while (true) {
    setFactory();
    sleep(1000);
   }
  } catch (InterruptedException e) {
   e.printStackTrace();
  }

 }

 public static void main(String[] args) {
  TestMain aTest = new TestMain();
  aTest.start();
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值