分类: 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.}
分享到:
相关推荐
本篇文档详细介绍了JVM调优工具的命令使用及其相关知识点,涵盖了内存信息分析、死锁检测、JMX远程监控等方面的命令行工具的使用方法。 首先,文档提到了JPS命令,它用于查看当前运行的Java进程信息,并返回进程ID...
这个项目的主要目标是演示如何利用Java编程语言在SpringBoot环境中获取服务器的相关信息。下面将详细阐述SpringBoot、Siger以及如何在Java中获取服务器信息。 SpringBoot是由Pivotal团队提供的全新框架,其设计目的...
内容:Java代码,获取服务器的基本信息(内存,cpu,存储状态等) 适用场景:服务器均可适用,主要是监测服务器的使用状态。 使用方法: 1.添加工程依赖 <!-- 获取系统信息 --> <groupId>...
#### 获取JVM命令配置信息的方法 在了解具体参数之前,首先需要知道如何查看可用的JVM参数及其说明。以下是在Windows平台上的示例步骤: 1. **打开CMD命令提示符**:点击开始菜单 -> 所有程序 -> Java -> Java SDK ...
SpringBoot结合Sigar获取服务器监控信息提供restful接口的源代码, 并使用swagger生成接口文档, 包括 CPU信息,服务器基本信息,内存信息, JVM信息,磁盘信息等. 有详细的代码注释.
本文将深入探讨如何利用RMI远程连接到Java虚拟机(JVM),并通过JMX获取JVM的相关参数。 RMI是Java提供的一种机制,允许在不同JVM之间透明地调用对象的方法,就像这些对象都在同一台机器上一样。RMI的核心组件包括...
1. **获取dump文件**:当JVM出现问题时,通过JVM的命令行选项(如`-XX:+HeapDumpOnOutOfMemoryError`)或者使用如`jmap`命令生成heap dump文件。 2. **安装HeadAnalyzer**:解压`ha414.jar`文件,这是一个包含...
尽管不同JVM打印的Thread Dump可能略有差异,但它们通常提供了当前所有活动线程的状态信息以及JVM中所有Java线程的堆栈跟踪详情。这些堆栈信息包括完整的类名、执行的方法以及可能的源代码行号。 **1.2 Thread Dump...
文档中的示例代码通过创建两个线程同时获取两个不同的锁,演示了如何制造一个死锁的场景。然后使用jstack加上进程id来查找死锁的线程。通过这种方式,我们可以识别出Java应用中的死锁问题。 在远程监控方面,JMX...
Java通过Java虚拟机(JVM)在不同的操作系统上运行,使得开发者可以使用相同的代码库来处理各种硬件信息。 在Windows环境下,Java可以通过Java Native Interface (JNI) 来调用本地API,如Kernel32.dll中的函数,...
要查看JVM中的线程信息,可以使用`ThreadMXBean`的静态工厂方法`ManagementFactory.getThreadMXBean()`获取实例,然后调用相关方法。以下是一个简单的示例代码(参考文件`ThreadAction.java`): ```java import ...
通过不同的参数,我们可以获取更多详细信息: - `-q`:只显示进程ID。 - `-v`:显示每个进程启动时传递给JVM的命令行参数。 - `-m`:显示传递给main方法的参数。 - `-l`:显示main类或jar的完全限定名称。 ...
首先,获取服务器的实际物理内存值至关重要。在Linux环境中,可以通过执行`cat /proc/meminfo | grep MemTotal`命令来获取,单位为KB。了解服务器的总内存有助于合理分配各个Java进程的资源。 其次,需要识别服务器...
JMX能够帮助我们获取JVM内存状态、CPU利用率、线程信息以及垃圾收集情况等关键指标。此外,它还支持动态调整日志级别,例如log4j可以通过JMX接口在线调整日志级别。 JMX不仅仅是一个规范,它同时提供了一个框架,...
**基于(siger)开发的SpringBoot项目,java获取服务器信息** 该项目为 Java探针 运行前提是 有Jvm环境,集成了Swagger接口 **场景:** 在没有使用 **分布式**的项目,进行集群管理时,有时候来了做服务器监控的...
总结来说,Hyperic Sigar是一个强大且灵活的系统监控工具,通过其Java API我们可以轻松获取服务器的各种状态信息,这对于管理和监控Java应用是非常有价值的。在实际项目中,结合日志分析、性能测试等手段,可以更好...
通过这些信息,我们可以监控内存使用情况,防止内存泄漏,并适时调整JVM的内存配置。 网络监控通常涉及网络接口的带宽使用、连接状态和错误统计。在Java中,`java.net`包提供了`Socket`和`ServerSocket`类用于创建...
其中`libname`为本地代理库文件名,如`hprof`,可用于获取JVM的运行情况,包括CPU、内存、线程等运行数据,并可以输出到指定文件中。`options`是传递给本地库的参数,多个参数间用逗号分隔。在不同的操作系统上,...
2. **通过网络下载**:从远程服务器获取.class文件。 3. **从压缩文件加载**:如从ZIP或JAR文件中加载。 4. **从特定数据库中提取**:针对某些应用场景,如从专用数据库中提取.class文件。 5. **动态编译**:在运行...