一。监控可以做的事
1,监测平台和硬件的健康性
2,在应用层面上配置资源 (譬如数据库过载,可以手动调节连接数)
3,收集应用统计数据
4,调试选项,更改日志级别等
5,监视服务器的性能
实现方案:JMX
二,基本jmx条目
1,可管理的资源
包括任意的应用,设备或其他java可以调用包装的实体
2.MBean
Managed bean:满足jmx规范,具有特定名称和继承规范的java类
jmx包含3种bean:标准,动态,模版
MBean都驻扎在一个叫MBean Server的地方
3.MBean Server
管理一组MBean的java类,是jmx管理环境中的核心,使用注册的方式来查找Mbeans,
并且对注册的MBean暴露管理接口,提供方法来查找MBean
4.Jmx agent
提供一系列服务来管理MBean的一个java进程,是MBean Server的容器
agent可以有一组适配器和连接器来让远程不同的客户端使用自己,适配器可以映射协议,譬如http,snmp
连接器可以把agent暴露出来让客户端通过rmi,jini连接
5.协议适配器和连接器 Protocol adaptor and connector
存在与agent中,通过协议或连接暴露agent
6.管理应用 Management application
通过接口连接agent,管理其中MBean的应用程序
7通知 Notification
Mbean和MBean Server包装的事件,报警,或一般通知
8.设备 Instrumentation
定义如何实现管理资源的规范
三,jmx架构
层 | 描述 |
分布服务层 | 包含管理应用与代理层通信的各种组件 |
代理层 | 包含代理和MBean服务器 |
设备层 | 包含代表可管理资源的MBean |
四。编码规则 for all MBeans
1,所有的MBean必须是具体的java类,即可以实例化非抽象的类
2,要有public的构造器
3,所有的MBean要么实现自己的MBean接口,要么实现DynamicMBean接口,接口要以MBean结尾
4.标准的接口和实现必须要在同一个包路径下,只能实现单个接口,多个接口实现不允许,但是接口继承后类再实现是可以的。
标准MBean就是实现了自己MBean接口的MBean(好拗口)
所有的MBean还可以实现NotificationBroadcaster接口,这个接口可以发布通知给监听者
五,标准MBean
1.接口组成
- public级别的构造器constructor
MBean要被JMX管理,可以动态生成MBean,因此必须要有公开constructor
- 属性(Attributes)
通过声明getter setter方法来暴露属性,所有以get(无参) set开头的方法被认为是属性的一部分
setter方法不能重载,属性不一致jmx认为是无效的
- 操作(Operations)
非set get开头的方法,用来实现某些功能
- 通知(Notifications)
通过实现NotificationBroadcaster接口发布通知
2.接口实现与类继承问题
I.单继承无接口
PrinterMBean<interface>
⬆️
Printer <class> ⬅️ CopiedPrinter<class>
CopiedPrinter具有PrinterMBean的相关方法和属性
II.继承与接口
PrinterMBean<interface> CopiedPrinterMBean<interface>
⬆️ ⬆️
Printer <class> ⬅️ CopiedPrinter<class>
由于MBean规范规定只能实现一个接口,MBean agent会查找最近的interface,因此CopiedPrinter只有CopiedPrinterMBean接口定义的相关属性和方法
但是接口继承是没有问题的,如果CopiedPrinterMBean继承了PrinterMBean的话,CopiedPrinter就会有这两个接口相关的属性和方法,见III.
III.接口继承
PrinterMBean<interface> ⬅️ CopiedPrinterMBean<interface>
⬆️ ⬆️
Printer <class> ⬅️ CopiedPrinter<class>
CopiedPrinter具有PrinterMBean相关属性和方法,但是这些并不是从Printer来的,而是从接口CopiedPrinterMBean接口继承来的
IV.接口继承非MBean接口
Printer<interface> ⬅️ CopiedPrinterMBean<interface>
⬆️
CopiedPrinter<class>
CopiedPrinter行为是由两个接口决定的,CopiedPrinterMBean继承了所有的方法