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(); } }
JMX入门代码
猜你喜欢
转载自furturestrategist.iteye.com/blog/1217733
今日推荐
周排行