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入门是一个重要的主题,尤其对于那些希望深入了解Java应用监控和管理的开发者而言。 这篇博客文章(可以通过给定的链接访问)可能是介绍JMX基础知识的一个很好的起点。虽然具体的博客内容未在描述中给出,但我们...
- **可扩展性**:JMX允许添加新的管理功能而不会影响现有代码。 - **跨平台兼容**:因为它是Java的一部分,所以JMX可以在任何支持Java的平台上运行。 - **标准化**:JMX是Java平台的标准,这意味着有广泛的支持和...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、系统和服务。JMX提供了一种灵活的框架,...结合实际的源代码,你可以进一步探索JMX的实践应用,从而提升你的Java开发技能。
总结一下,这个JMX入门例子展示了如何创建一个简单的MBean,将其注册到MBean服务器,并通过`jconsole`进行交互。了解JMX对于任何需要管理和监控Java应用的开发者来说都是一项重要技能,它提供了强大的灵活性和可扩展...
### JMX入门教程详解 #### 一、JMX概述与价值 JMX,全称Java Management Extensions,是Java平台提供的一套标准化管理框架,旨在帮助开发者在任何Java应用程序中植入管理功能。通过JMX,可以实现对应用程序的监控...
压缩包中的“一起分享 一起成长 - goCom - SOA中国第一社区.htm”可能是某个社区讨论JMX的网页,其中可能包含了一些讨论、示例代码或者用户的经验分享。“新建 文本文档.txt”可能是一份简单的文本教程,介绍JMX的...
### JMX:开发人员快速入门指南 #### 一、概述 **Java Management Extensions (JMX)**,简称为JMX,是Java平台提供的一种标准API,用于管理和监控应用程序资源。通过JMX,Java开发者可以实现对其应用程序组件(或...
Azure SDK for Java 通常会包含示例代码、文档和必要的依赖库,以帮助开发者快速入门。在“azure-sdk-for-java.zip”压缩包内的“azure-sdk-for-java-master”可能是指源码仓库的主分支,包括所有子项目的源代码、...
- **示例演示**:通过具体的代码示例来展示如何使用JMX进行资源管理,帮助读者更好地理解理论知识。 ##### 2. “Hello World”,JMX的方式 - **JMX Hello World程序**:通过一个简单的“Hello World”程序来介绍...
这些端点可以通过HTTP接口或者JMX访问,帮助开发者了解应用的实时状态。 **8. 配置文件** SpringBoot支持YAML和Properties两种配置文件格式,它们提供了层次化的配置,使得配置更加清晰。通过@Value注解或者@...
Maven软件包通过发布 享受,格雷·沃森小样计划这是一个可以帮助您入门。通过HTTP为Web浏览器发布JMX Bean SimpleJMX还包含一个使用Jetty的简单Web服务器处理程序,以便您可以使用JmxWebServer类从Web浏览器或其他...
本教程“Java网络编程从入门到精通”将详细讲解这些概念,并通过实例代码说明如何在实践中应用。通过学习,你将掌握创建网络服务、处理网络请求、优化网络性能等技能,为你的Java开发生涯打下坚实的基础。无论是新手...
此外,管理工具如Admin Console或JMX(Java Management Extensions)允许管理员监控和管理运行中的J2EE应用。 综上所述,J2EE为Web开发提供了全面的解决方案,涵盖了从用户界面到业务逻辑再到数据存储的各个层面。...
Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...
8. **远程构建(Remote Builds)**: Ant支持通过JMX接口进行远程控制,允许在不同的机器上执行构建任务。 通过学习和实践这些Ant的基本概念和高级特性,你将能够有效地管理Java项目的构建过程,提高开发效率,同时...
这个“Struts+Hibernate+Spring入门教程及实例”压缩包可能包含以下内容:教程文档、代码示例、项目结构、配置文件等,帮助初学者理解这三个框架的基本概念、配置方法以及如何在实际项目中进行整合。通过阅读文档、...
- 理解WebSphere的性能监控工具,如JMX和System Management Console。 - 调整JVM参数,优化内存分配,提升服务器性能。 6. **故障排查**: - 学习如何查看和分析WebSphere的日志文件,以定位和解决问题。 - ...
主力于Java的唯品会,关于Java的一些小家底。 各位看官看着是好的,烦请“Star”。 1.0.8版 - 2018.9.24 Java Standard Project Description ...JMX 查看工具 ...文档:《入门科普,围绕JVM的各种
标题 "activemq入门总结" 暗示了本文将主要围绕Apache ActiveMQ,一个流行的开源消息代理和队列中间件进行讲解。ActiveMQ是基于Java Message Service (JMS) API 的,它允许应用程序在分布式环境中发送和接收消息,...
【Jmeter性能测试入门】 Apache JMeter是一款强大的开源性能测试工具,主要被用于Web应用程序的负载和压力测试。它能够模拟多个并发用户执行各种操作,从而分析系统的性能瓶颈和稳定性。JMeter最初设计用于HTTP协议...