jmx入门
- 格式:doc
- 大小:105.84 KB
- 文档页数:9
JMX远程控制问题背景讨论:在JAVA运行时,对JVM系统的检测、管理是开发同学一直期望的,目前有一些开源产品开源针对JVM进行监控,例如javamelody等等,这样框架虽然好,但是如果使用会带来一些问题。
第一:由于javamelody入口是一个filter,所以会带来性能问题、第二:如果应用服务器很多,会缺乏统一管理,此外安全性、爬虫等等问题略过不提JDK自带了故障检测工具Jconsole和1.6出来的Jvisualvm都可以远程对服务器进行监控,后者甚是提供可以在线得到ThreadDump和HeapDump文件,更是提供了可扩展插件功能(虽然可能会影响jvm服务器性能)但现状很多公司都有自己的运维团队,未必会把线上服务器的权限交给我们开发同学,所以有必要了解JAVA远程管理方面的知识,假设如果在后台有一套系统,可以管理、监控我们线上所有java服务器,如果出现问题不需要对每个服务器进行排查而是直接从列表中获取、定位到信息,岂不是一件很幸福的事情~ 书归正文,分享下近几天在JMX方面的知识,JDK的API中翻译过来对javax.management的描述提供Java Management Extensions 的核心类。
Java Management Extensions (JMXTM) API 是一个用于管理和监视的标准API。
典型用途包括:1)查询并更改应用程序配置2)累积有关应用程序行为的统计数据并使其可用3)通知状态更改及错误状况。
4)JMX API 还可以作为解决方案的一部分来管理系统、网络等。
5)API 包括远程访问,远程管理程序可以基于这些目的与正在运行的应用程序进行交互。
JMX核心类为Mbean。
MBean 是表示资源的指定管理对象。
它有一个管理接口,该接口包括以下内容:1)可以读取和/或写入的指定名称和类型的属性2)可以调用的指定名称和类型的操作3)可以由MBean 发送的指定类型的通知。
jmx exporter运行的yml文件书写规则本文将介绍JMX Exporter运行的YML文件书写规则。
JMX Exporter是一个用于将Java中的JMX(Java Management Extensions)指标数据转换为Prometheus可理解的形式的工具。
通过使用YML文件,我们可以指定要暴露的JMX指标,并配置其标签和命名规则。
1. YML文件结构YML文件使用简洁的层次结构来表示数据。
每个段落通常由键值对组成,使用冒号(:)分隔。
以下是一个基本的JMX Exporter YML文件的结构示例:```---startDelaySeconds: 0ssl: falselowercaseOutputName: falselowercaseOutputLabelNames: falsewhitelistObjectNames: []rules:- pattern: 'ng:type=Memory'name: jvm_memoryattrNameSnakeCase: truetype: gaugeattrs:- HeapMemoryUsage- NonHeapMemoryUsage```在本示例中,YML文件使用三个虚线表示分隔符(---),表示这是一个新的文件块。
下面是每个标记的含义:- `startDelaySeconds`: 设置在应用程序启动后多少秒钟后启动JMX Exporter,默认为0.- `ssl`: 指定是否使用SSL连接,默认为false.- `lowercaseOutputName`: 指定输出指标的名称是否使用小写字母,默认为false.- `lowercaseOutputLabelNames`: 指定输出标签的名称是否使用小写字母,默认为false.- `whitelistObjectNames`: 指定要暴露的JMX指标对象的白名单,为空表示暴露所有对象,默认为空列表.- `rules`: 指定要暴露的JMX指标以及其配置规则。
一、JMX简单介绍Tomcat从5.0版本开始引入JMX,力图使JMX成为Tomcat未来版本的管理工具和平台。
首先,让我们来对JMX做一个简单了解。
JMX是Java Management Extension的缩写,可译为Java管理工具扩展,扩展的意思就是JMX不包含在标准的J2SE中,我们必须要另外下载JMX RI的实现。
不过,这种把JMX排除在J2SE之外的情况已经成为历史了,J2SE5.0和J2SE6.0都已经包含了JMX的标准实现。
这说明,JMX已经成为J2SE不可分割的一部分,另外一方面,JMX已经成为Java平台上管理工具的事实标准,在业界广泛使用。
例如,JBOSS就是以JMX为微内核,Web应用模块和其它功能模块都可热插拨到这个微内核,将JMX的管理功能发挥得淋漓尽致。
从当前业界使用情况看,JMX中的X(Extension,扩展)应该去掉,改名为Java Management Standard Platform (JMSP,Java管理标准平台)更加合适。
为了向下兼容,我们姑且还是称之为JMX吧。
JMX要管理的对象是什么呢,是资源。
什么是资源,资源是指企业中的的各种应用软件和平台,举例来说,一个公司内部可能有许多应用服务器、若干Web服务器、一台至多台的数据库服务器及文件服务器等等,那么,如果我们想监视数据库服务器的内存使用情况,或者我们想更改应用服务器上JDBC最大连接池的数目,但我们又不想重启数据库和应用服务器,这就是典型意义上的资源管理,即对我们的资源进行监视(Monitoring,查看)和管理(Management,更改),这种监视和更改不妨碍当前资源的正常运行。
对资源进行适当的监测和管理,可以让我们的IT资源尽可能的平稳运行,可以为我们的客户提供真正意思上的24×7服务。
在资源耗尽或者在硬件出故障之前,我们就可以通过管理工具监测到,并通过管理工具进行热调整和插拔。
Java中的JMX监控有哪些常用指标在 Java 应用程序的运行和维护中,JMX(Java Management Extensions)监控是一项非常重要的技术。
通过 JMX,我们可以获取到应用程序内部的各种运行时信息,从而更好地了解应用的性能、健康状况和资源使用情况。
下面我们就来详细探讨一下 Java 中的 JMX 监控中一些常用的指标。
首先,内存相关的指标是至关重要的。
其中,“Heap Memory Usage”(堆内存使用量)是一个关键指标。
它能让我们了解到 Java 堆内存中已使用的空间和剩余的可用空间。
通过监控这个指标,我们可以及时发现是否存在内存泄漏的风险。
如果堆内存的使用量持续增长,而没有得到有效的释放,就可能意味着存在内存泄漏问题,需要进一步排查和解决。
另一个与内存相关的重要指标是“NonHeap Memory Usage”(非堆内存使用量)。
非堆内存主要包括方法区、JVM 内部数据结构等。
监控非堆内存的使用情况,可以帮助我们了解 JVM 自身的资源消耗,以及是否存在由于非堆内存不足而导致的性能问题。
线程相关的指标也是 JMX 监控中的重点。
“Thread Count”(线程数量)可以告诉我们当前应用中活跃的线程总数。
如果线程数量过多,可能会导致系统资源的竞争加剧,从而影响性能。
“Thread Blocked Count”(阻塞线程数量)则反映了当前处于阻塞状态的线程数量。
过多的阻塞线程可能意味着存在资源竞争或者死锁等问题,需要及时进行排查和处理。
“CPU Usage”(CPU 使用率)是评估应用性能的一个关键指标。
它可以让我们了解应用程序在一段时间内占用 CPU 资源的情况。
如果CPU 使用率持续处于高位,可能意味着应用程序存在计算密集型的操作,或者存在性能瓶颈,需要进一步优化算法或者调整架构。
“Class Loading and Unloading”(类的加载和卸载)指标也是值得关注的。
jmx教程(⽆图)1、JMX的Hello World⼀、JMX简介什么是JMX?在⼀篇⽹⽂中是这样说的:"JMX(Java Management Extensions)是⼀个为应⽤程序植⼊管理功能的框架。
JMX 是⼀套标准的代理和服务,实际上,⽤户可以在任何Java应⽤程序中使⽤这些代理和服务实现管理",这句话我现在看着还是不知所云,云⾥雾⾥。
我们还是从JMX能给我们提供什么好处⼊⼿来理解吧。
举⼀个应⽤实例:在⼀个系统中常常会有⼀些配置信息,⽐如服务的IP 地址,端⼝号什么的,那么如何来写这些代码呢?1.程序初哥⼀般是写死在程序⾥,到要改变时就去改程序,然后再编译发布;2.程序熟⼿则⼀般把这些信息写在⼀个配置⽂件⾥(JAVA⼀般都是*.properties⽂件),到要改变时只要改配置⽂件,但还是重新启动系统,以便读取配置⽂件⾥的新值;3.程序好⼿则会写⼀个段代码,把配置值缓存起来,系统在读值的时候,先看看配置⽂件有没有更动。
如有更改则重读⼀遍,否则从缓存⾥读取值4.程序⾼⼿则懂得取物为我所⽤,⽤JMX!把配置属性集中在⼀个类,然后写⼀个叫MBean的东东,再配置⼀下就轻松搞定了。
⽽且JMX⾃动提供了⼀个WEB页⾯来给你来改变这些配置信息。
⼆、准备⼯作JMX是⼀份规范,SUN依据这个规范在JDK(1.3、1.4、5.0)提供了JMX接⼝。
⽽根据这个接⼝的实现则有很多种,⽐如Weblogic 的JMX实现、MX4J、JBoss 的JMX实现。
在SUN⾃⼰也实现了⼀份,不过在JDK1.4之前,这件JMX实现(⼀些JAR包)是可选的,你得去它的⽹站上下载。
JDK5.0则内嵌了进来,安装JDK5.0就可以开发基于JMX的代码了。
但JDK5.0并⾮包含所有SUN的关于JMX的代码,有⼀些⼯具类是排除在JDK5.0之外的。
下⾯根据所使⽤的JDK版本情况,谈⼀谈开发环境的准备。
1、JDK1.3、1.4去SUN⽹站下载SUN的JMX实现,共两个ZIP⽂件,下载⽹址:/doc/fb16715356.html/products/JavaManagement/download.html。
jmx processcpuload 单位-回复什么是JMX Process CPU Load单位?JMX(Java Management Extensions)是一种Java平台的管理和监控技术,用于监控和管理Java应用程序。
JMX提供了一组API和工具,帮助开发人员在应用程序运行时收集和分析各种指标。
其中一个重要的指标是进程的CPU负载。
在JMX中,JMX Process CPU Load单位是用来表示进程的CPU负载的度量单位。
CPU负载是指CPU在某个时间段内所承载的工作量,通常以百分比的形式表示。
JMX Process CPU Load单位帮助我们了解应用程序使用CPU的程度,以便我们能够及时采取适当的措施来调整应用程序的性能和资源分配。
JMX提供了一个名为jmx.processcpuload的指标,用于监控和统计进程的CPU负载。
该指标可以通过JMX客户端或其他监控工具进行查询和分析。
在JMX中,jmx.processcpuload的单位是一个纯数值的百分比,范围从0到100之间。
这个值表示CPU在某个时间段内被进程所占用的百分比。
那么如何使用JMX Process CPU Load单位来监控和调整应用程序的性能呢?下面是一个基本的步骤和指南:1. 首先,确保你的应用程序已经将JMX集成到了代码中,并正确地暴露了JMX端点或MBean。
这样才能够通过JMX来监控和管理你的应用程序。
2. 使用JMX客户端连接到你的应用程序的JMX端点。
JMX客户端可以是自己编写的代码,也可以是一些成熟的监控工具,如JConsole或VisualVM。
通过连接到JMX端点,你可以获得应用程序的各种指标,包括JMX Process CPU Load。
3. 查询和获取JMX Process CPU Load的值。
通过JMX客户端提供的API或命令,你可以获取当前进程的CPU负载百分比。
这个值可以用来评估应用程序的当前性能和CPU使用情况。
软件性能测试工具Jmeter入门级教程案例性能测试工具Jmeter入门级教程案例JMeter学习(一)工具简单介绍一、JMeter 介绍Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。
它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。
JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。
同时,JMeter可以帮助你对你的应用程序进行回归测试。
通过你创建的测试脚本和assertions来验证你的程序返回了所期待的值。
为了更高的适应性,JMeter允许你使用正则表达式来创建这些assertions.JMeter与LoadRunner比较JMeter 是一款开源(有着典型开源工具特点:界面不美观)测试工具,虽然与LoadRunner 相比有很多不足,比如:它结果分析能力没有LoadRunner详细;很它的优点也有很多:?开源,他是一款开源的免费软件,使用它你不需要支付任何费用,?小巧,相比LR的庞大(最新LR11将近4GB),它非常小巧,不需要安装,但需要JDK环境,因为它是使用java 开发的工具。
?功能强大,jmeter设计之初只是一个简单的web性能测试工具,但经过不段的更新扩展,现在可以完成数据库、FTP、LDAP、WebService等方面的测试。
因为它的开源性,当然你也可以根据自己的需求扩展它的功能。
两者最大的区别:jmeter不支持IP欺骗,而LR支持。
缺点使用JMeter无法验证JS程序,也无法验证页面UI,所以要须要和Selenium配合来完成Web2.0应用的测试。
二、JMeter 下载安装1)JMeter安装1.解压文件到任意目录2. 安装JDK,配置环境变量JAVA_HOME.3. 系统要求:JMeter2.11 需要JDK1.6以上的版本支持运行4. JMeter可以运行在如下操作系统上:Unix,Windows 和Open VMS.5. 避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题。
jmx exporter原理JMX (Java Management Extensions) Exporter原理解析JMX Exporter是一个用于将JMX(Java Management Extensions)指标导出为Prometheus可读格式的工具。
它的原理是使用JMX连接器与JMX代理进行交互,从而获取JMX指标并将其转换为Prometheus指标。
在理解JMX Exporter的原理之前,首先需要了解JMX的基本概念。
JMX是一个用于监控和管理Java应用程序的Java API。
它提供了一种标准的方式,使开发人员可以对Java应用程序的运行状态和性能进行监控和管理。
JMX使用一种面向对象的结构来组织指标。
它定义了MBean (Managed Bean)的概念,每个MBean代表一个可管理的对象。
MBean包含一系列的属性和方法,这些属性和方法可以用于获取和修改对象的状态。
每个MBean都有一个唯一的对象名称(ObjectName),用于在JMX代理中标识该对象。
JMX Exporter的工作原理主要分为以下几个步骤:1. 配置JMX Exporter:首先,需要在JMX Exporter的配置文件中指定要监控的Java进程的JMX连接信息。
这包括Java进程的主机名、端口号以及连接凭证(如果需要认证)。
配置文件还可以指定要导出的指标的过滤规则。
2. 连接到JMX代理:JMX Exporter使用JMX连接器连接到Java 进程的JMX代理。
JMX连接器是一个JVM内部的组件,用于与JMX代理进行通信。
它提供了一种标准的方式,使JMX客户端能够与Java 进程的JMX代理进行交互。
3. 获取对象名称:JMX Exporter使用JMX代理提供的接口获取Java进程中的所有MBean的对象名称。
这些对象名称标识了Java 进程中的每个管理对象。
4. 过滤对象名称:根据配置文件中指定的过滤规则,JMX Exporter对获取到的对象名称进行筛选,选择出需要导出的指标所对应的对象名称。
jmx_prometheus_javaagent 指标-概述说明以及解释1.引言1.1 概述概述部分的内容:JMX(Java Management Extensions)是一种Java平台的管理和监控技术,它为开发者提供了一套标准API,用于监控和管理Java应用程序的可管理资源。
然而,JMX的指标数据在默认情况下通常无法直接被Prometheus这样的开源监控系统采集和处理。
为了解决这个问题,社区开发了一个开源的中间件工具,名为jmx_prometheus_javaagent。
jmx_prometheus_javaagent是一个Java代理程序,能够帮助我们将JMX的指标数据转换为Prometheus所能接受的格式,并将其暴露给Prometheus服务器进行采集和监控。
它通过在Java应用程序启动时作为Java代理(Java Agent)进行加载,并与Java虚拟机(JVM)进行交互,将JMX的指标数据以HTTP接口形式供Prometheus进行采集。
本文将详细介绍jmx_prometheus_javaagent的概念、使用方法以及其所具有的优势。
我们将首先简要介绍该工具的背景和目的,之后会深入探讨它的使用方法和配置选项。
随后,我们将重点讨论jmx_prometheus_javaagent相较于其他JMX数据采集工具的优势和特点,以及它在实际应用中的潜在价值。
通过研究和使用jmx_prometheus_javaagent,我们可以更方便、高效地将JMX的指标数据与Prometheus进行集成,为我们的应用程序提供强大的监控和管理能力。
在这篇文章中,我们将全面介绍jmx_prometheus_javaagent的使用和优势,帮助读者更好地理解和应用这个强大的工具,并为其在未来的发展提供展望。
1.2 文章结构文章结构部分应该包含以下内容:文章结构部分主要介绍本篇文章的整体结构和组织方式,让读者了解文章从头到尾的逻辑流程。
JMX入门JMX越来越多得出现在各种技术杂志、以及社区,如ibm的developerworks和bea的dev2dev。
不仅仅是SUN,许多厂商都宣布已经或是准备支持这一技术。
IBM、BEA、HP、Marcomedia(JRun)这些大的厂商,而且还有许多小的软件公司和开源项目也都加入了这一行列。
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础JMX中的术语:∙MBean:是Managed Bean的简称。
在JMX中MBean代表一个被管理的资源实例,通过MBean暴露一系列方法和属性,外界可以获取被管理的资源的状态和操纵MBean 的行为。
事实上,MBean就是一个Java Object,同JavaBean模型一样,外界使用反射来获取Object的值和调用Object的方法,只是MBean提供了更加容易操作的反射的使用。
Mbean 包括4种类型:标准MBean、动态MBean、开放MBean、模型MBe an。
∙MBeanServer:MBeanServer是MBean 的容器。
MBeanServer管理这些MBean,并且通过代理外界对它们的访问。
MBeanServer提供了一种注册机制,通过注册Adaptor 和Connector,以及MBean到MBeanServer,并且通过代理外界对它们的访问。
外界可以通过名字来得到相应的MBean实例。
∙JMX Agent:Agent只是一个Java进程,它包括这个MBeanServer和一系列附加的M beanService。
当然这些Service也是通过MBean的形式来发布。
∙Protocol Adapters and ConnectorsJMX Agent通过各种各样的Adapter和Connector来与外界(JVM之外)进行通信。
同样外界(JVM之外)也必须通过某个Adapter和Connector来向JMX Agent发送管理或控制请求。
Jdmk5.1中,sun提供很多Adaptor和Connector的实现Adapter和Connector的区别在于:Adapter是使用某种协议(HTTP或者SNMP)来与JMX Agent获得联系,Agent端会有一个对象(Adapter)来处理有关协议的细节。
比如SNMP Adapter和HTTP Adapter。
而Connector在Agent端和client端都必须有这样一个对象来处理相应的请求与应答。
比如RMI Connector。
JMX Agent可以带有任意多个Adapter,因此可以使用多种不同的方式访问Agent。
JMX基本构架:JMX分为三层,分别负责处理不同的事务。
它们分别是:∙Instrumentation 层Instrumentation层主要包括了一系列的接口定义和描述如何开发MBean的规范。
通常JMX所管理的资源有一个或多个MBean组成,因此这个资源可以是任何由Java语言开发的组件,或是一个JavaWrapper包装的其他语言开发的资源。
∙Agent 层Agent用来管理相应的资源,并且为远端用户提供访问的接口。
Agent层构建在Intru mentation层之上,并且使用管理Instrumentation层内部的组件。
通常Agent由一个MBeanServer 组成。
另外Agent 还提供一个或多个Adapter 或Connector 以供外界的访问。
Distributed 层Distributed 层关心Agent 如何被远端用户访问的细节。
它定义了一系列用来访问Agent 的接口和组件,包括Adapter 和Connector 的描述。
Jmx 三层之间的关系:(图一)本图片来自SUN JDMK 的官方文档MBeanMBean Serve rMBeanHTTP Adaptor MBeanRMI AdaptorSNMP Adaptor Agent levelInstrumentationlevelConnector levelJMX Manager WEB Browse SNMP ManagerRemote Manager(图二)用另外的一个图来解释这3层之间的关系(图三)1:储蓄用户、企业贷款用户都需要到银行注册开户 2:企业贷款需要通过其开户,然后从银行拿到钱 3:拿到的钱是大部分储蓄用户存入的 JMX 的开发过程也是如此 1:创建一个JMXServer 2:创建Mbean3:把创建的Mbean 和现成的Adaptor 注册到JMXServer 上来 4:启动JMXServer5:manager 通过Adaptor 访问Resource (Mbean )Hello wold 开发开户(注册)储蓄用户(MBean )开户(注册)银行 (MBean server )企业贷款用户 adaptor connector企业贷款 manager所需要资源:1:jdk1.4 eclipse jdmk5.1(/software/jdmk/). spring1.2.42:从下载的ZIP包里面用到:jmx.jar, jmxremote.jar,jdmkrt.jar,3:为什么要采用jmxremote.jar,jdmkrt.jar,sun提供了一些对adaptor 以及connector供开发者使用。
本文的helloworld会采用htmladaptor以及RmiConnector的进行访问,并且用spring来展示spring对JMX的支持(展示htmladaptor)。
文件夹结构已经会用到的类(图四)1:通过htmladaptor对访问,程序具体解释HelloWorldMBean是一个ingerfraceHelloWorld是HelloWorldMBean的实现HelloAgent里面创建了一个MbeanServer,并且把创建的Mbean和sun提供的Adaptor 注册在MbeanServer上清单一HelloWorldMbeanpublic interface HelloWorldMBean {public void sayHello();public void setHello(String hello);}清单二HelloWorldpublic class HelloWorld implements HelloWorldMBean {private String hello;public HelloWorld() {this.hello = "Hello World! I am a Standard MBean";}public HelloWorld(String hello) {this.hello = hello;}public void setHello(String hello) {this.hello = hello;}public void sayHello() {System.out.println(hello);}}清单三HelloAgentpublic class HelloAgent {private MBeanServer mbs = null;public HelloAgent() {//create a MBeanServermbs = MBeanServerFactory.createMBeanServer("HelloAgent");//create an adapterHtmlAdaptorServer adapter = new HtmlAdaptorServer();//create a MBeanHelloWorld hw = new HelloWorld("hello boys!");ObjectName adapterName = null;ObjectName helloWorldName = null;try {adapterName = new ObjectName("HelloAgent:name=htmladapter,port=9092");//regisetr the adapter to the MBeanServermbs.registerMBean(adapter, adapterName);//declare the port which the adapter useradapter.setPort(9092);//start the adapteradapter.start();helloWorldName = new ObjectName("HelloAgent:name=helloWorld1");mbs.registerMBean(hw, helloWorldName);} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]) {//declare the agent and start the adapterHelloAgent agent = new HelloAgent();}}必须注意的问题1:MBean 接口的命名,必须遵循xxxMBean2:MBean 实现类的命名必须遵循使用xxx3:MBean 实现类必须是一个Concrete class 可以实例化,并且必须最少有一个构造函数并且为publicHtmlAdapter是sun JDMK工具包中提供的adaptor运行上面的agent:在浏览器中输入:http://localhost:9092/(图五)通过浏览器你可以访问注册的helloagent,并且通过agent,可以访问到您注册到MbeanServer 上的MBeanHelloAgent 下面有有2个资源1:helloworld1是注册上来的MBean2: htmlAdpter 是注册上来的adapter现在就可以通过浏览器来管理hellowold1这个MBean点击name=helloWorld1就可以进来管理helloword1这个MBean输入一个hello girls ,然后Apply那么Helloword 里面的hello变量就成为hello girls(图六)点击List of MBean operations,下面的sayHello,就会发现控制台打印出say girls通过Adaptor来管理MBean是不是很简单,当然我们这里管理的只是一个Standerd MBean,并且是没有notification 的机制,如果您想深入的学习,可以去亚马逊书店买一本JMX in Action 这是英文的,国内目前还没有译本。