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

本文展示了如何利用Java编程语言通过JMX接口获取操作系统和JVM的状态信息,包括内存、线程、编译器和内存池等关键指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分类: 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.}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值