通过JVM获取相关的服务器信息 .

分类: j2ee 2009-05-12 16:12 1034人阅读 评论(0) 收藏 举报 
在我们想监控我们的JVM状态的时候,除了可以通过JMX这类jvm提供的接口服务,还是可以自己通过程序来编写一些接口来获取服务器状态信息。

以下代码我在jdk1.5.10版本上测试通过。

 
[java] view plaincopyprint?
01.import java.lang.management.CompilationMXBean;  
02.import java.lang.management.GarbageCollectorMXBean;  
03.import java.lang.management.MemoryMXBean;  
04.import java.lang.management.MemoryPoolMXBean;  
05.import java.lang.management.RuntimeMXBean;  
06.import java.lang.management.ThreadMXBean;  
07.import java.util.List;  
08.import sun.management.ManagementFactory;  
09.import com.sun.management.OperatingSystemMXBean;  
10.  
11.  
12./** 
13. * java获取所在操作系统的信息,JVM的相关信息 
14. * @author kongqz 
15. * */  
16.public class MyJvm {  
17.  
18.    /** 
19.     * @param 直接通过jdk来获取系统相关状态,在1.5.0_10-b03版本以上测试通过 
20.     */  
21.    public static void main(String[] args) {  
22.          
23.        System.out.println("=======================通过java来获取相关系统状态============================ ");  
24.        int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位   
25.        System.out.println("总的内存量 i is "+i);  
26.        int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量   
27.        System.out.println("空闲内存量 j is "+j);  
28.        System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024);  
29.      
30.        System.out.println("=======================OperatingSystemMXBean============================ ");  
31.        OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();  
32.        System.out.println(osm.getFreeSwapSpaceSize()/1024);  
33.        System.out.println(osm.getFreePhysicalMemorySize()/1024);  
34.        System.out.println(osm.getTotalPhysicalMemorySize()/1024);  
35.          
36.        //获取操作系统相关信息   
37.        System.out.println("osm.getArch() "+osm.getArch());  
38.        System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors());  
39.        System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize());  
40.        System.out.println("osm.getName() "+osm.getName());  
41.        System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime());  
42.        System.out.println("osm.getVersion() "+osm.getVersion());  
43.        //获取整个虚拟机内存使用情况   
44.        System.out.println("=======================MemoryMXBean============================ ");  
45.        MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean();  
46.        System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage());  
47.        System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage());  
48.        //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况   
49.        System.out.println("=======================ThreadMXBean============================ ");  
50.        ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean();  
51.        System.out.println("getThreadCount "+tm.getThreadCount());  
52.        System.out.println("getPeakThreadCount "+tm.getPeakThreadCount());  
53.        System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime());  
54.        System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount());  
55.        System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime());  
56.          
57.        //当前编译器情况   
58.        System.out.println("=======================CompilationMXBean============================ ");  
59.        CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean();  
60.        System.out.println("getName "+gm.getName());  
61.        System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime());  
62.          
63.        //获取多个内存池的使用情况   
64.        System.out.println("=======================MemoryPoolMXBean============================ ");  
65.        List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans();  
66.        for(MemoryPoolMXBean mpm:mpmList){  
67.            System.out.println("getUsage "+mpm.getUsage());  
68.            System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString());  
69.        }  
70.        //获取GC的次数以及花费时间之类的信息   
71.        System.out.println("=======================MemoryPoolMXBean============================ ");  
72.        List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans();  
73.        for(GarbageCollectorMXBean gcm:gcmList){  
74.            System.out.println("getName "+gcm.getName());  
75.            System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames());  
76.        }  
77.        //获取运行时信息   
78.        System.out.println("=======================RuntimeMXBean============================ ");  
79.        RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();  
80.        System.out.println("getClassPath "+rmb.getClassPath());  
81.        System.out.println("getLibraryPath "+rmb.getLibraryPath());  
82.        System.out.println("getVmVersion "+rmb.getVmVersion());  
83.    }  
84.  
85.}

相关推荐