一、JMX的一些定义与用途

Java Management Extensions:Java管理扩展,是管理系统和资源之间的一个接口,它定义了管理系统和资源之间交互的标准。

1、专门管理,监控jvm的一些信息的,特别是visual vm这个监控jvm的东西,还有一个添加JMX连接的时候

2、能使得基于java语言开发的程序能被管理,并且是可扩展的。

3、用jmx把需要配置的属性集中在一个类中,然后写一个MBean,再进行相关配置。另外JMX还提供了一个工具页,以方便我们对参数值进行修改。

4、让开发者和管理者可以获取程序运行的状态以及动态的修改程序的相关配置。

程序开启JMX功能可以监控程序的资源使用情况,因为JDK自带了关于程序资源情况的MBean工具类

我们可以使用类似的设计模式,对我们程序中的资源进行 监控和控制

二、JMX入门

先了解基本的专业术语:
1、MBean:是Managed Bean的简称,在JMX中MBean代表一个被管理的资源实例,通过MBean暴露一系列的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。事实上,MBean就是一个Java Object。同javabean模型一样,外界使用反射获取Object的值和调用Object的方法,只是MBean提供了更加容易操作的反射的使用。MBean包括4种类型:标准MBean、动态MBean,开放MBean,模型MBean。

2、MBeanServer:MBeanServer是MBean的容器。MBeanServer管理这些MBean,并且通过代理外界对它们的访问。MBeanServer提供了一种注册机制,通过注册Adaptor和Connector,以及MBean到MBeanServer,并且通过代理外界对它们的访问,外界可以通过名字来得到相应的MBean实例。

3、JMX Agent:Agent只是一个java进程,它包括这个MBeanServer和一系列附加的MBeanService。当然这些Service也是通过MBean的形式来发布。

4、Protocol Adaptors and Connectors:JMX Agent通过各种各样的Adaptor 和Connector来与外界(JVM之外)进行通信。同样外界(JVM之外)也必须通过某个Adaptor和Connector向来JMX Agent发送管理或控制请求。jdk5.1中,sun提供很多Adaptor和Connector的实现。

Adaptor 和Connector·的区别在于:Adaptor是使用某种协议(Http和SNMP)来与JMX Agent获得联系,Agent端会有一个对象(Adaptor)来处理有关协议的细节。比如SNMP Adaptor·和HTTP Adapter.而Connector·在Agent端和client端都必须有这样一个对象来处理响应的请求和应答。比如RMI Connector·。

JMX Agent可以带有任意多个Adaptor·,因此可以使用多种不同的方式访问Agent。

JMX基本构架:JMX分为三层,分别负责处理不同的事务。它们分别是:

1、Instrumention层:Instrumention 层主要包括了一系列的接口定义和描述如何开发MBean的规范。通常JMX所管理的资源有一个或多个MBean组成,因此这个资源可以是任何由Java语言开发的组件,或是一个JavaWrapper包装的其他语言开发的资源。

2、Agent层:Agent用来管理相应的资源,并且为远端用户提供访问的接口。Agent层构建在Intrumentation层之上,并且使用管理Instrumentation层内部的组件。通常Agent由一个MBeanServer组成。另外Agent还提供一个或多个Adapter或Connector以供外界的访问。

3、Distributed层:Distributed层关心Agent如何被远端用户访问的细节。它定义了一系列用来访问Agent的接口和组件,包括Adapter和Connector的描述。

三、应用场景

1、中间件软件weblogic的管理页面就是基于JMX开发的。

2、hibernate号称实现了JMX规范,将可管理,可调用的MBean注册到MBeanServer中,通过一种类似web服务的方式公布出去,并且伴有一个名字,可以通过该名字找到该MBean,并且,这里的MBean是可以被管理的。

3、Tomcat的自带应用manager就是使用了JMX方式来管理Tomcat。以此完成我web应用的动态部署、启动、停止。

4、JBoss则整个系统都基于JMX架构,使用JMX治理内部的各个service。

5、基于java的开源网管软件Hyperic HQ,通过JMX与各被治理资源进行通讯和信息采集。

JMX是一个治理的框架

当我们想使用JMX的时候,就要问,我们的系统当中有需要监控治理的资源或者对象吗?实事求是一点,我们不能为了想使用一个高端的技术,就歪曲系统的本来面目。

假如肯定要用,接着就看这些资源是否有生命周期。

经典案例:JBoss就是将所有可部署的组件作为资源来治理,这些组件都有生命周期。这个理念甚至延伸到了其系统内部,将其内部的服务作为组件纳入到JMX中来,成就了JBoss基于JMX的微内核系统。

典型的应用场景:
一个系统中,个内部模块系统之间的,基于接口方式的互相调用和治理,使用JMX是最佳方案。。带来的好处是:
1、面向接口,远程调用对于开发人员是透明的,模块在调用JMX接口时,与调用本地方法几乎相同。

2、可视化的治理界面,通过Jconsole等JMX客户端。可以实时监控系统,并且可实时调用方法进行某些操作。

四、JMX与Web Service

1、个人认为,我们实现JMX规范,将东西发布出去,和通过Web service的方式是很类似的,也是可以远程调用的,只是相对的web service的方式更加SOA一些。

2、从这里,我觉得JMX可以实现的,我们也都可以通过web service实现,只是看在它有个M上,以后如果有什么系统管理,监控方面的,可以考虑使用它,也许开发,个人觉得还是使用web service好一些。

3、选择webservice,xmlrpc等,但是这些都需要手工编写或用工具生成大量的代码来辅助完成接口间的java对象序列化。

五、现在的JMX连接方式

提供了三种Connector:RMI Connector / JMXMP Connector(JMX message protocol Connector) / Jolokia

1、RMI Connector 用JAVA的RMI功能来实现,可以在本地调用接口对象,这个不多说,因为只能是JAVA客户端使用,实现不了异构系统。

2、JMXMP Connector 就是使用协议在通讯了,Java也有实现这种连接的API,其他语言肯定也有的,这个能实现异构系统调用,是RMC模式。

3、Jolokia is a JMX-HTTP bridge giving an alternative method of accessing JMX beans,can be accessed using /jolokia on your management HTTP server.

实现原理

从Java 5开始,JDK就是提供非常有名的java.lang.management包,包里提供了许多MXBean的接口类,开发者可以很方便的获取到JVM的内存,GC,线程,锁,class,甚至操作系统层面的各种信息。我们可以 遍历程序所有的MBean查看。

JMX的l理解的更多相关文章

  1. jmeter 后台运行 setsid bin/jmeter -n -t .jmx文件 -l .jtl文件

    备注: 另外,在Linux下我们有时候希望线程可以在后台运行,这样我们关闭当前连接后,线程依然可以运行,这里提供一个将 jmeter命令设置为后台线程的方法. 使用setsid命令:  setsid  ...

  2. jenkins jmeter持续集成批处理jmx脚本

    这篇文章介绍jenkis jmeter的持续集成,利用jenkins定时任务去批处理执行jmeter的jmx脚本文件,并且生成测试报告 1:jmeter的安装这里我就不在赘述了,如有问题可参考我的jm ...

  3. Jmeter简单回顾

    之前公众号推文一上手就分享如何测接口, 其实忽略了一些概念性的东西, 今天来给大家拾遗补缺, 做个回顾吧. 一. JMeter介绍 jmeter能做什么,来自官网的解释: Ability to loa ...

  4. Windows和Linux的Jmeter分布式集群压力测试

    Windows的Jmeter分布式集群压力测试 原文:https://blog.csdn.net/cyjs1988/article/details/80267475 在使用Jmeter进行性能测试时, ...

  5. jmeter录制https请求

    工具:Jmeter4.0 + Java1.8 需求:对某https网站进行 登录-修改信息-退出 场景的压力测试 方法:使用Apache JMeter HTTP(S) Test Script Reco ...

  6. JMeter学习笔记(六)-负载与监听

    1. 场景设计 场景设计的原则:忠于用户实际操作,组合用户的各种操作到场景中来. JMeter场景主要通过线程组设置来完成的,对于复杂场景还需要与逻辑控制器配合完成. 2.场景设置 JMeter线程组 ...

  7. Jmeter3.0-多维度的图形化HTML报告

    本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...

  8. JMeter接口压力测试课程入门到高级实战

    章节一压力测试课程介绍 1.2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分 ...

  9. Jmeter Cluster

    Jmeter 是开源软件,100%纯java应用程序,专门为负载测试和性能测试. Jmeter的特性包括: 1.负载测试和性能测试许多不同的服务器/协议类型: Web - HTTP, HTTPS SO ...

随机推荐

  1. How-to: Do Real-Time Log Analytics with Apache Kafka, Cloudera Search, and Hue

    Cloudera recently announced formal support for Apache Kafka. This simple use case illustrates how to ...

  2. Cursor: Pin S Wait On X In The Top 5 Wait Events

    Wait Events , Posted in: Technical Track Tags: Group Blog Posts, Oracle, Technical Blog Lately, wait ...

  3. IDEA+Maven+各个分支代码进行合并

    各个模块的分支代码进行合并到一起:https://blog.csdn.net/xsj_blog/article/details/79198502

  4. typeScript面对对象篇一

    面向对象是typescript的核心部分,这里先介绍下面向对象的七大原则: 单一原则:一个类子负责一个职责. 里氏替换原则:子类可以在任何地方替换它的父类. 依赖倒置原则:代码要依赖于抽象的类,而不要 ...

  5. python之yagmail模块--小白博客

    yagmail 实现发邮件 yagmail 可以简单的来实现自动发邮件功能. 安装 pip install yagmail 简单例子 import yagmail #链接邮箱服务器 yag = yag ...

  6. HTML之超链接

    图像标签 图像标签为 <img> ,它是行内元素,其主要功能是在网页里面插入图像,所插入图片由属性 scr 属性决定.主要格式为 <img scr="URL"&g ...

  7. CodeVs 1615 数据备份

    题目:数据备份 链接:Here 题意:有n个点在一条线上,每次连线可以连接两个点(每个点只能被连一次),要求找出m个连线,他们的和最小(连线权值就是两点距离),输出最小的和.给出n.m和每个点的坐标. ...

  8. Eclipse 设置背景色

    window -> preferences ->  General -> Editors -> Test Editors -> Background color 勾掉Sy ...

  9. json内存级非关系数据库

    介绍 `jsonDB2`是一个基于内存的键值对数据库(非关系型数据库) 开发初衷:实现个人tornado项目中内存session存储功能(不想引入redis等非关系型数据库) 项目地址: https: ...

  10. BZOJ4977[Lydsy1708月赛]跳伞求生——贪心+堆+模拟费用流

    题目链接: 跳伞求生 可以将题目转化成数轴上有$n$个人和$m$个房子,坐标分别为$a_{i}$和$b_{i}$,每个人可以进一个他左边的房子,每个房子只能进一个人.每个房子有一个收益$c_{i}$, ...