JMX入门代码


     
  package org.jmx.monitor.local.test;

import java.lang.management.ClassLoadingMXBean;
import java.lang.management.CompilationMXBean;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.RuntimeMXBean;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.util.List;

import javax.management.MBeanServer;

/**
 * @company www.changyou.com
 * @author wangzhen
 * @date 2011-10-26
 */
public class TestJVM {

	public static void main(String[] args) {

		// getClassInfo();
		// getComplaint();
		// getMemory();
		//getThread();
		//getRuntimeJVM();
		//getOperatingSystem();
		//getMemoryPoolMXBeans();
		getGarbageCollectorMXBeans();
		//getMBeanServer();
	}

	/**
	 * class信息
	 */
	public static void getClassInfo() {

		ClassLoadingMXBean bean = ManagementFactory.getClassLoadingMXBean();

		System.out.println("正在运行class数量:" + bean.getLoadedClassCount());
		System.out.println("一共加载class数量:" + bean.getTotalLoadedClassCount());
		System.out.println("已经卸载class数量:" + bean.getUnloadedClassCount());
	}

	/**
	 * 编译信息
	 */
	public static void getComplaint() {

		CompilationMXBean bean = ManagementFactory.getCompilationMXBean();

		System.out.println("虚拟机编译器名称:" + bean.getName() + ",编译时间:"
				+ bean.getTotalCompilationTime());

	}

	/**
	 * 内存信息
	 */
	public static void getMemory() {

		MemoryMXBean bean = ManagementFactory.getMemoryMXBean();

		System.out.println("返回其终止被挂起的对象的近似数目:"
				+ bean.getObjectPendingFinalizationCount());

		MemoryUsage heapUserage = bean.getHeapMemoryUsage();

		System.out.println("堆内存____Java 虚拟机最初从操作系统请求用于内存管理的内存量:"
				+ heapUserage.getInit() / 1024);
		System.out.println("堆内存____已使用的内存量:" + heapUserage.getUsed() / 1024);
		System.out.println("堆内存____已提交给 Java 虚拟机使用的内存量:"
				+ heapUserage.getCommitted() / 1024);
		System.out.println("堆内存____内存管理的最大内存量:" + heapUserage.getMax() / 1024);

		MemoryUsage noHeapUserage = bean.getNonHeapMemoryUsage();

		System.out.println("栈内存____Java 虚拟机最初从操作系统请求用于内存管理的内存量:"
				+ noHeapUserage.getInit() / 1024);
		System.out.println("栈内存____已使用的内存量:" + noHeapUserage.getUsed() / 1024);
		System.out.println("栈内存____已提交给 Java 虚拟机使用的内存量:"
				+ noHeapUserage.getCommitted() / 1024);
		System.out
				.println("栈内存____内存管理的最大内存量:" + noHeapUserage.getMax() / 1024);

	}

	/**
	 * 获取线程信息
	 */
	public static void getThread() {

		ThreadMXBean bean = ManagementFactory.getThreadMXBean();

		System.out.println("总共线程数:"+bean.getThreadCount());
		
		ThreadInfo[] threadInfo = bean.dumpAllThreads(true, true);

		for (int i = 0; i < threadInfo.length; i++) {

			System.out.println("线程名称:" + threadInfo[i].getThreadId() + ",线程Id:"
					+ threadInfo[i].getThreadId() + ",线程状况:"
					+ threadInfo[i].getThreadState());
			StackTraceElement[] stackElement = threadInfo[i].getStackTrace();
			for (int j = 0; j < stackElement.length; j++) {

				System.out.println("class名称:"+stackElement[j].getClassName() + ",文件名称:"
						+ stackElement[j].getFileName() + ",行数:"
						+ stackElement[j].getLineNumber() + ",方法名:"
						+ stackElement[j].getMethodName());

			}

		}
		
		System.out.println("死锁状况:"+bean.findDeadlockedThreads());
		System.out.println("死锁周期:"+bean.findMonitorDeadlockedThreads());
		System.out.println("JVM从启动开始最大线程数量:"+bean.getPeakThreadCount());
		

	}
	/*
	 * 运行时JVM信息
	 */
	 public static void getRuntimeJVM(){
		 
		 
		 RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
		 
		 System.out.println("虚拟机名称:"+bean.getName());
		 System.out.println("引导类加载器用于搜索类文件的引导类路径:"+bean.getBootClassPath());
         System.out.println("统类加载器用于搜索类文件的 Java 类路径:"+bean.getClassPath());
         System.out.println("Java 库路径:"+bean.getLibraryPath());
         System.out.println("Java 虚拟机的启动时间:"+bean.getStartTime()/1000+"s");
         System.out.println("Java 虚拟机的正常运行时间:"+bean.getUptime()/1000+"s");
		 
	 }
	 
	 /**
	  * 操作系统信息
	  */
	 public static void getOperatingSystem(){
		 
		 OperatingSystemMXBean bean = ManagementFactory.getOperatingSystemMXBean();
		 
		 System.out.println("操作系统架构:"+bean.getArch());
		 System.out.println("JAVA虚拟机可以使用处理器数量:"+bean.getAvailableProcessors());
		 System.out.println("操作系统名称:"+bean.getName()+",操作系统版本号:"+bean.getVersion());
		 System.out.println("最后一分钟内系统加载平均值"+bean.getSystemLoadAverage());
		 
	 }
	 /**
	  * 虚拟机中的 MemoryPoolMXBean 对象列表
	  */
	 public static void getMemoryPoolMXBeans(){
		 
		 List<MemoryPoolMXBean> beans = ManagementFactory.getMemoryPoolMXBeans();
		 
		 for(int i = 0 ; i < beans.size() ; i++){
			 
			 MemoryPoolMXBean bean = beans.get(i);
			 
			 System.out.print("内存池名称:"+bean.getName()+",");
			 System.out.print("当前的内存使用量:"+bean.getUsage()+",");
			 System.out.print("峰值内存使用量:"+bean.getPeakUsage()+",");
			 if(bean.isUsageThresholdSupported()){
			   System.out.println("此内存池的使用量阈值"+bean.getUsageThreshold());
			 }
		 }
		 
	 }
	 /**
	  * 获取垃圾回收MXBeans信息
	  */
	 public static void getGarbageCollectorMXBeans(){
		 
		 List<GarbageCollectorMXBean> beans = ManagementFactory.getGarbageCollectorMXBeans();
		 
		 for(int i = 0 ; i < beans.size() ; i++){
			 
			 GarbageCollectorMXBean bean = beans.get(i);
			 
			 System.out.println("回收器名称:"+bean.getName()+",回收期次数"+bean.getCollectionCount()+",回收时间"+bean.getCollectionTime()/1000);
		     
			 String[] poolNames = bean.getMemoryPoolNames();
		 
			 for(int j = 0 ; j < poolNames.length; j++){
				 System.out.print(poolNames[j]);
			 }
			 System.out.println();
		 }
		 
		 
		 
		 
	 }
	 
	 /**
	  * MbeanServer信息
	  */
	 public static void getMBeanServer(){
		 
		 MBeanServer bean = ManagementFactory.getPlatformMBeanServer();
		 
		 
		 
		 
		 
	 }
	 
	 

}





猜你喜欢

转载自furturestrategist.iteye.com/blog/1217733
JMX