一、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. OpenCV 与 OpenGL 的关系是什么?

    OpenCV是 Open Source Computer Vision LibraryOpenGL是 Open Graphics LibraryOpenCV主要是提供图像处理和视频处理的基础算法库,还 ...

  2. 监控redis

    [4ajr@redis1 scripts]$ cat redismonitor.sh #!/bin/bash #想要什么监控项再添加 rediscli="/soft/redis/bin/re ...

  3. Parallel 类并行任务(仅仅当执行耗时操作时,才有必要使用)

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  4. 在Mac OS X下使用Apache、PHP、MySQL、Netbeans、Yii

    本文环境: Mac OS X:10.8.4 Apache:2.2.22 PHP:5.3.15 Netbeans:7.3.1 Yii:1.1.14 Mac OS X是内置了Apache服务器的,不过默认 ...

  5. 03-JavaScript之数据类型

    JavaScript之数据类型 1.介绍 JavaScript数据类型分为两类:原始类型(primitive type)和对象类型(object type) 2.原始类型 数字 - number.字符 ...

  6. [模板] 二分图博弈 && BZOJ2463:[中山市选2009]谁能赢呢?

    二分图博弈 from BZOJ 1443 游戏(二分图博弈) - free-loop - 博客园 定义 1.博弈者人数为两人,双方轮流进行决策. 2.博弈状态(对应点)可分为两类(状态空间可分为两个集 ...

  7. 面向对象__call__

    __call__在Python中,函数其实是一个对象: >>> f = abs>>> f.__name__'abs'>>> f(-123)123由 ...

  8. 「CF1154F」Shovels Shop【背包DP】

    题目链接 [洛谷传送门] 题解 非常简单的背包. \(f[i]\)表示购买\(i\)个物品所需要最少的花费. 不考虑免费的限制条件,那么一定是选择前\(k\)个双鞋子. 那么加入免费的条件,那么还是要 ...

  9. Codeforces 1082B Vova and Trophies(前缀+后缀)

    题目链接:Vova and Trophies 题意:给定长度为n的字符串s,字符串中只有G和S,只允许最多一次操作:任意位置的两个字符互换.求连续G的最长长度. 题解:维护pre和pr,nxt和nx. ...

  10. position:fixed not work?

    问题 在position:fixed的使用中,突然发现某个操作之后,fixed定位的位置变了?? bottom:0,left:0.本来应该在最下面,结果跑没影了. wtf?position:fixed ...