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();
}
}