JMX: Java Management Extensions
监控(维护jvm运行的一些信息),管理(更改)jvm服务器
MBean:
Managed Bean的简称。An MBean can represent a device, an application, or any resource that needs to be managed
通过MBean interface暴露一系列方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。MBean提供了更加容易操作的反射的使用。
The JMX specification defines four types of MBean: standard MBeans, dynamic MBeans, open MBeans(形如MXBean) and model MBeans.
命名约定:Standard MBean,MXBean
方法 T getN() 明确说明存在一个名为 N 的可读属性,忽略从Object继承的final方法: getClass().
方法 boolean isN() 明确说明存在一个名为 N 的可读属性,且该属性的类型为boolean,Open类型为 SimpleType.Boolean。
方法 void setN(T x) 明确说明存在一个名为 N 的可写属性。
其他每个方法都明确说明存在一个名称与该方法相同的操作。
好像不支持复杂属性Person
interface MBeanServer
MBean的容器
MBeanServerFactory.createMBeanServer()
addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback)
向已注册的 MBean 添加一个侦听器????
registerMBean(Object object, ObjectName name)
JMX Agent:用来与外界(JVM之外)进行通信。也是通过MBean的形式来发布。
Agent通过各种各样的Adapter和Connector来与外界(JVM之外)进行通信。
Adapter为各种协议工具,比如HtmlAdaptorServer,SNMP adapter
Connector,为远程的JVM,比如RMI Connector
与外界通信的方式?:
1,socket字节流
2,jmx,uc的不是jvm外,HtmlAdaptorServer本身就是socket
3,多线程的共享变量资源
2,file,数据库时特殊文件,那设备还是文件呢。linux下。
ObjectName
用来匹配MBean用。格式及合法实例
domain:key1=value1,key2=value2 //域:键属性模式
*:type=Foo,name=Bar,*
d:type=F?o,name=Bar,id=test
大系统,包含多个服务器,肯定是多个jvm了,
JMX在RMI上又封装了一层,rmi和webservice比较相似
jmx虽然是用来监控的,但是,还可以实现业务方法。
一个大系统中,各内部模块系统之间的基于接口方式的互相调用和治理,使用jmx是最佳方案.
带来的好处是
1.面向接口,远程调用对于开发人员是透明的,模块在调用jmx接口时,与调用本地方法几乎相同.
2.可视化的治理界面, 通过 Jconsole等jmx客户端,可以实时监控系统,并且可实时调用方法进行某些操作.
典型应用场景:
某聊天系统,一台服务器作为 在线用户列表服务器 A1, n台服务器为用户提供聊天业务处理 N1 ,N2,N3...,
一台服务器作为后台管理系统A2.
系统治理员现在进行下面这样一个操作,察看某用户是否在线,找到该用户,发现其在线,则将该用户加入黑名单,并踢下线.
对应的jmx接口可以由以下几个:
A1为A2提供查询在线用户jmx接口,加入黑名单接口,kickout接口,
A1为N1..等服务器提供以下接口: 注册业务服务器,添加在线用户.查找黑名单用户
N1...到N3为A1提供kickout接口.
因此在上面的踢下线操作,则由用户在A2的web界面发出,交由A1执行,A1记录黑名单之后,再找到用户所在业务服务器调用N1提供的接口让用户下线.
以上情形是在生产环境下的部署,而在开发工作,则可以将A1,A2,N...N3等功能合并在一个应用中调试. 由于使用的是jmx接口,在本地调试合并之后,可以直接调用应用内部接口方法.
这样借助jmx实现的应用模块的灵活组装与拆分,使得系统的可以根据负载需要,根据性能情况,灵活的拆分和整合部署分布式的应用.
替代方案,选择webservice,xmlrpc等,但是这些都需要手工编写或用工具生成大量的代码来辅助完成接口间的java对象序列化 。
经典jmx案例:
1.Jboss.使用jmx治理内部的各个service。
2. 基于java的开源网管软件 Hyperic HQ ,通过jmx与各被治理资源进行通讯和信息采集.
<网友回复>JMX是一个治理的框架。
当我们想使用JMX的时候,就要问,我们的系统当中有需要监控治理的资源或者对象吗?实事求是一点,我们不能为了想使用一个高端的技术,就歪曲系统的本来面目。
假如第一个问题是肯定的,接下来就是看这些资源是否有生命周期。
经典案例:jboss就是将所有可部署的组件作为资源来治理,这些组建都有其生命周期。这个理念甚至延伸到了其系统内部,将其内部的服务作为组件纳入到 JMX中来,成就了jboss基于jmx的微内核系统。
某聊天系统,一台服务器作为 在线用户列表服务器 A1, n台服务器为用户提供聊天业务处理 N1 ,N2,N3...,
一台服务器作为后台管理系统A2.
系统治理员现在进行下面这样一个操作,察看某用户是否在线,找到该用户,发现其在线,则将该用户加入黑名单,并踢下线.
对应的jmx接口可以由以下几个:
A1为A2提供查询在线用户jmx接口,加入黑名单接口,kickout接口,
A1为N1..等服务器提供以下接口: 注册业务服务器,添加在线用户.查找黑名单用户
N1...到N3为A1提供kickout接口.
因此在上面的踢下线操作,则由用户在A2的web界面发出,交由A1执行,A1记录黑名单之后,再找到用户所在业务服务器调用N1提供的接口让用户下线.
以上情形是在生产环境下的部署,而在开发工作,则可以将A1,A2,N...N3等功能合并在一个应用中调试. 由于使用的是jmx接口,在本地调试合并之后,可以直接调用应用内部接口方法.
这样借助jmx实现的应用模块的灵活组装与拆分,使得系统的可以根据负载需要,根据性能情况,灵活的拆分和整合部署分布式的应用.
croba松耦合的企业架构
核心就是那个类似corbar的东西,一个企业主线,然后很多服务通过这个主线来实现可插拔的结构
各个服务相互独立,需要的时候进行装配
JMX
负责管理那些部署在平台上的功能性组件。这些组件以暴露其管理接口的方式注册到JMX Server中,
并通过资源的ObjectName来定位和获取其实例。实现即插即用,JMX起到内核总线的作用。
JMX与JNDI
JMX是架构“管理”各个组件的生命周期是其主要出发点,JNDI为了获取相应的资源或者类,来调用这个组件所提供的功能,一般是业务功能。
RMI
资源resource
CPU、网卡、存储阵列、数据库、IBM Websphere都是 IT 资源;
不同的IT资源就像是说着不同语言的人:需要给每个 IT 资源配个翻译,统一通信统一管理。
MBean 中公开的方法,最终会被 JMX 转化成属性(Attribute)、监听(Listener)和调用(Invoke)的概念。如果读者对 Java Bean 有一些了解的话
SwitchConfService不需要做成JMX的MBean?都是一个虚拟机内的操作,干嘛用
死锁检查
ThreadMXBean.findDeadlockedThreads()
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信
RMI是Java的一组拥护开发分布式应用程序的API,分布式在不同jvm上。
选unicode asscii eacaspsed
用UE,unix、windows、bom等和16进制,和二进制看,本质一样的。10进制不一样。
不需要报名,到本地。
javac *.java
字节顺序,和bytebuffer。还有要验证。
管理构件可以通过以下三种方法实例化和注册:
1)通过另一个管理构件
2)管理代理本身
3)远程应用程序
自从SUN发布了JMX规范,许多大公司纷纷行动起来,实现规范或者实现相应的基于JMX的网络管理系统,下面列出了当前的主要实现及应用情况:
1)SUN为JMX规范了作出了相应的参考实现,并在此基础上开发了一个全新的用于网络管理的产品JDMK(Java动态管理工具集),其中定义了资源的开发过程和方法、动态JMX代理的实现、远程管理应用的实现。同时,JDMK也提供了一个完整的体系结构用来构造分布式的网络管理系统,并提供了多种协议适配器和连接器,如SNMP协议适配器、HTML协议适配器、HTTP连接器、RMI连接器。
2)IBM Tivoli实现了JMX规范的产品为TivoliJMX,它为JAVA管理应用程序和网络提供了架构、设计模式、一些API集和一些服务。
3)Adventnet开发的关于JMX的产品为AdventNet Agent Toolkit,它使得定义新的SNMP MIB、开发JMX和Java SNMP Agent的过程自动化。
4)JBoss实现的J2EE应用服务器以JMX为微内核,各个模块以管理构件的形式提供相应的服务。
5)BEA的Weblogic应用服务器也将JMX技术作为自己的管理基础。
JMX体系结构分为四层,即设备层、代理层、分布服务层和附加协议API。但SUN当前只实现了前两层的具体规范,其余的规范还在制定当中。JMX代理要和远程应用程序通信,需要提供至少一个连接器和协议适配器。