Java理论与实践:用JMX检测操纵程序[Java编程]
本文“Java理论与实践:用JMX检测操纵程序[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
有多少次您曾经凝视着运行中的利用程序,问自己:“它到底在做什么?为 什么用了这么长时间呢?” 在这些时刻,您大概会想假如自己在利用程序中构 建了更多的监督功效就行了.比方,在服务器利用程序中,可以查看列队等候处 理的任务的数目和范例、当前正在处理的任务、过去一分钟或一小时内的吞吐量 统计、平均任务处理时间等.这些统计值简单汇集,但是在需求数据的时刻,如 果没有非侵入性的数据检索机制,那么这些值就不太有效.
可以用很多方法导出操作性数据——可以把周期性统计快照写入日记文件、 成立 Swing GUI、利用内嵌的 HTTP 服务器在 Web 页面上显示统计值大概公布 可以用来查询利用程序的 Web 服务.但是在贫乏监督和数据公布底子设备的情 况下,大都利用程序开辟人员都做不到这些,因此造成对利用程序工作情形的了 解要比预期的少量多.
JMX
在 Java 5.0 中,类库和和 JVM 供应了一种全面的管理和监督底子设备—— JMX.JMX 是一种用来供应可以远程拜候的管理接口的尺度办法,也是一种向应 用程序增添机动且强盛的管理接口的简易方法.被称作受管 bean(MBean)的 JMX 组件,是供应与实体的管理有关的拜候器和业务办法的 JavaBean.每个受 管的实体(大概是整个利用程序或利用程序中的服务)实例化一个 MBean 并用 可读懂的名称注册它.支持 JMX 的利用程序依靠于 MBeanServer,它充当 MBean 的容器,供应远程拜候、命名空间管理和安全服务.在客户端,jconsole 工具可以充当统一的 JMX 客户机.结合二者,对 JMX 的平台支持极大地降低了 使利用程序支持外部管理接口所需的工作和勤奋.
除了供应 MBeanServer 实现,Java SE 5.0 还供应 JVM 以更便利地理解内 存管理、类装入、活动线程、日记和平台配置的状况.大都平台服务的监督和管 理在默许情形下都是开启的(性能影响最小),所以只需求连策利用程序与 JMX 客户机便可.图 1 给出了 jconsole JMX 客户机(JDK 的一部份) ,它显示了 此中一个内存管理视图——一段时间内的堆利用情形.Perform GC 按钮则证明 了 JMX 可以供应 除了查看操作统计值之外的初始化操作的功效.
图 1. 用 jconsole 查看堆利用情形
传输和安全性
JMX 指定了在 MBeanServer 和 JMX 客户之间通信所利用的协议,协议可以 在各种传输机制上运行.可以利用针对本地衔接的内置传输,及通过 RMI、 socket 或 SSL 的远程传输(可以通过 JMX Connector API 成立新的传输). 认证是由传输履行的;本地传输答应用相同的用户 ID 衔接到运行在本地系统上 的 JVM;远程传输可以用口令或证书举行认证.本地传输在 Java 6 下默许就是 启用的.要在 Java 5.0 下启用它,需求在 JVM 启动时定义系统属性 com.sun.management.jmxremote.“Monitoring and Management using JMX” 这份文档(请参阅参考资料)描写了启用和配置传输的配置步骤.
检测 Web 服务器
检测利用程序来利用 JMX 很简单.像其他很多远程调用框架(RMI、EJB 和 JAX-RPC)一样,JMX 也是基于接口的.要成立管理服务,需求成立指定管理方 法的 MBean 接口.然后可以成立一个 MBean 来实现此接口、实例化它及把它注 册到 MBeanServer.
清单 1 显示了网络服务(比方 Web 服务器)的 MBean 接口.它供应了检索 配置信息(比方端口号)和操作性信息(比方服务能否启动)的 getter.它还 包含查看和改正可配置参数(比方当前日记级别)的 getter 和 setter,还有 调用管理操作(比方 start() 和 stop())的办法.
清单 1. 某个 Web 服务器的 MBean 接口
public interface WebServerMBean {
public int getPort();
public String getLogLevel();
public void setLogLevel(String level);
public boolean isStarted();
public void stop();
public void start();
}
实现 MBean 类普通非常直接明了,因为 MBean 接口要反映现有实体或服务 的属性和管理操作.比方,MBean 中的 getLogLevel() 和 setLogLevel() 办法 会直接转给被 Web 服务器利用的 Logger 上的 getLevel() 和 setLevel() 方 法.JMX 做了一些命名限制.比方,MBean 接口名称必须以 MBean 末尾, FooMBean 接口的 MBean 类必须叫作 Foo.(可以用更高级的 JMX 特点——动 态 MBean 往复除这个限制.)把 MBean 注册到默许的 MBeanServer 也很简单 ,如清单 2 所示:
清单 2. 用内置的 JMX 实现注册 MBean
public class WebServer implements WebServerMBean { ... }
...
WebServer ws = new WebServer(...);
MBeanServer server = ManagementFactory.getPlatformMBeanServer ();
server.registerMBean(ws, new ObjectName ("myapp:type=webserver,name=Port 8080"));
以上是“Java理论与实践:用JMX检测操纵程序[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |