Skip to content

JMX技术学习jmx

主要组件
组件名称简单介绍示例
MBean管理对象,封装了可以被监控和管理的资源,分为标准 MBean、动态 MBean 和 开放 MBean。public class Hello implements HelloMBean { ... }
MBeanServer运行时环境,所有 MBean 注册在 MBeanServer 中,提供对 MBean 的注册、查询、操作等功能。MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
JMX Connector外部客户端与 MBeanServer 之间的桥梁,通过它可以远程连接、监控和管理 MBeans。通过 JMX Connector 可以使用远程监控工具,如 JConsole 连接远程 JMX 服务。
JMX 客户端工具可视化工具,用于连接和管理 JMX 服务器,如 JConsole、VisualVM 等。使用 JConsole 连接到运行的 Java 应用程序并查看其性能数据。
JMX远程连接配置
1. 启用 JMX 远程连接,Java 程序需要配置为允许远程 JMX 连接。这通常是通过 JVM 启动参数来实现。
bash
java -Dcom.sun.management.jmxremote
     -Dcom.sun.management.jmxremote.port=1099
     -Dcom.sun.management.jmxremote.ssl=false
     -Dcom.sun.management.jmxremote.authenticate=false
     -Dcom.sun.management.jmxremote.rmi.port=1099
     -Djava.rmi.server.hostname=127.0.0.1
     -jar myapp.jar
2. 连接到 JMX 远程端口, 动 Java 程序后,可以使用支持 JMX 的客户端(如 JConsole、VisualVM、或者编写 Java 代码)连接到远程程序。
3. 通过 RMI (Remote Method Invocation): JMX 使用 RMI 作为远程连接的通信协议,RMI 用于实现不同 JVM 之间的对象调用。
使用案例
用法简要描述示例
应用监控和性能管理监控 JVM 的性能指标,包括内存使用、线程状态、垃圾回收等。使用 MemoryMXBean 获取堆内存使用情况:MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
JVM 配置和调整动态调整应用配置,如缓存大小、线程池大小、数据库连接池等。AppConfigMBean:通过 JMX 修改应用的配置,如调整缓存大小:setCacheSize(int cacheSize)
远程监控和管理通过 RMI 或 JMX 连接器远程连接并管理应用程序。启动 JVM 时启用远程 JMX:java -Dcom.sun.management.jmxremote.port=1099 -jar myapp.jar
自定义 MBeans 实现将应用中的业务逻辑、状态或资源暴露为可管理的对象,进行监控和管理。自定义 MBean 示例:public class MyAppMBeanImpl implements MyAppMBean { ... }
动态管理和控制动态控制应用行为,如启停业务模块、调整速率限制、缓存策略等。使用 Notification 机制发送通知,告知应用中的事件或状态变化:new MyNotification(...)
资源管理动态管理应用中的资源,如线程池、数据库连接池等。管理线程池:public class ThreadPoolManager implements ThreadPoolManagerMBean { ... }
故障排除和诊断通过 JMX 诊断和排查应用中的性能瓶颈、死锁、内存泄漏等问题。通过 ThreadMXBean 检测死锁:long[] deadlockedThreads = threadMXBean.findDeadlockedThreads();
集成第三方工具与第三方监控工具(如 Prometheus、Nagios 等)进行集成,进行自动化监控。集成 Prometheus:使用 JMX Exporter 将指标暴露给 Prometheus 进行监控。