服务器响应指数异常,想用 JConsole 监控一下,就发现个 JMX 玩意,也就参考写一下笔记把 1. 什么是 JMX JMX(Java Management Extensions,即Java管理扩展)是一个 Java 平台的管理和监控接口,是 JavaEE内嵌的一套标准的代理和服务,也就是说只要遵循这个接口标准 ,那么就可以管理和监控我们的应用程序 JVM 首先会将自身的各种资源注册到 JMX 中,所以我们能够监控到堆栈、内存、线程、类加载等数据。 当然也可以将我们创建的对象也注册到 JMX 中进行管理和监控 开源库中也有更加通用的工具,比如 SpringBoot-Actuator,使用和配置起来更加简便 2. 结构 MBean:ManagedBean,被管理的Bean对象,是遵循接口规范的对象 MBeanServer:管理 MBean 对象 Connector、Adaptor:对外提供访问 JMX 的接口,
作: 监视JVM 通过java.lang.management提供的标准类可以对JVM进行监视: import java.lang.management.* def os = ManagementFactory.operatingSystemMXBean println """OPERATING SYSTEM: OS architecture = $os.arch OS name = $os.name OS version = $os.version OS pro
通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件 引言部分摘自百度百科,实际上JMX是java5开始提供的对java应用进行监控的一套接口,或者我们也可以像理解JUC 包一样理解JMX,把它当成一个框架。 ,jmap等监控工具是由虚拟机直接支持的,并不是通过JMX。 Jconsole监控工具实际上是基于JMX对一些封装Bean进行可视化,实际上这些Bean并不是固定不变的,开发人员也可以通过JMX提供的接口将自定义的Bean展示到Jconsole上,这些接口主要在javax.management 是JMX URL的标准前缀、rmi是jmx connector server的传输协议、jndi/rmi://localhost:1099/jmxrmi 这个是jmx connector server的路径
JMX协议监控,可通过JMX协议远程监控,实时监控线上jvm情况,并通过平台管理界面进行 展示,可以通过监控实时获得线上服务器运行情况。 可以监控内存、实时线程、共享内存等各种信息。 * 根据jmx配置 * 将线程信息返回 */ public class JvmRuntimeServiceImpl implements JvmRuntimeService { protected if(logger.isDebugEnabled()) logger.debug("url:"+url); String jmxURL = "service:jmx e.getMessage(), e); } } return resultList; } /** * 建立jmx
JMX JMX(java Management Exetensions)在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。 通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等 优点是可以非常容易的使应用程序被管理 伸缩性的架构使每个JMX Agent Service可以很容易的放入到Agent MBeanServer是JMX代理的核心组件。 它们不是通过MBean服务器的远程表示来访问JMX代理,而是通过映射到MBeanServer的操作来访问JMX代理。 Connectors Connectors用于将代理与为JMX技术启用的远程管理应用程序连接,即使用JMX规范的分布式服务开发的管理应用程序。
一、JMX简介 JMX是一种JAVA的正式规范,它主要目的是让程序有被管理的功能,那么怎么理解所谓的“被管理”呢? 当然,你也许会专门为这些管理来开发软件,但如果你借助JMX,则会发现创建这样的管理程序是如此简单。 因为你无需为管理程序来开发界面,已经有通用的JMX管理软件,如MC4J,或者是用一般都附带提供的HTML网页来管理,你要做的仅仅是将自己要被管理和监控类的按照JMX规范修改一下即可。 中间件软件WebLogic的管理页面就是基于JMX开发的,而JBoss则整个系统都基于JMX构架。 二、监控Weblogic 下面介绍下如何通过jmx获取监控信息。 } } return lstEjb; } 如果还有其他需求可以查看http://edocs.weblogicfans.net/wls/docs92/jmx
ActiveMQ支持JMX监控,使用步骤如下: 一、修改conf/activemq.xml <broker … useJmx="true”> <managementContext> <managementContext createConnector="true" connectorPort=“jmx端口号” connectorHost=“本机ip地址" /> </managementContext> </broker> 二、设置jmx.access、jmx.password的文件权限 chmod 400 conf/jmx.* (即:将jmx.password 然后在jconsole中,可以输入 ip地址:jmx端口号 ? 其中username,password即jmx.password中定义的用户名和密码。 四、 spring中使用JMX <bean class="org.springframework.<em>jmx</em>.support.MBeanServerConnectionFactoryBean" id
vim /data/tomcat/tomcat-8080/bin/catalina.sh 编辑catalina.sh,提供jmx端口。 5、在zabbix agent部署的tomcat服务器上,copy对应的java jmx监控的相关jar包到tomcat对应的目录下。 cp catalina-jmx-remote.jar /data/tomcat/tomcat-8080/lib cp cmdline-jmxclient-0.10.3.jar /data/tomcat/ ] 名称:tomcat繁忙线程数 键值:jmx["Catalina:name=\"http-bio-8080\",type=ThreadPool",currentThreadsBusy] 名称:java 键值:jmx["java.lang:type=Threading","ThreadCount"] 名称:java虚拟机启动或峰值重置以来峰值活动线程数 键值:jmx["java.lang:type=Threading
使用JMX监控Tomcat介绍Java Management Extensions(JMX)是一种Java平台的管理和监控标准。 在本篇博客中,我们将探讨如何使用JMX监控Tomcat服务器。步骤步骤1:启用JMX支持在Tomcat的启动脚本中,我们需要加入一些参数来启用JMX支持。 步骤3:连接到Tomcat服务器现在,我们可以使用任何JMX客户端工具连接到Tomcat服务器,并监控和管理它。在接下来的步骤中,我们将以VisualVM为例。 使用Java代码连接到Tomcat的JMX服务器,并获取服务器的一些信息的示例:javaCopy codeimport javax.management. 在本文中,我们介绍了如何启用Tomcat的JMX支持,并使用VisualVM连接和监控Tomcat服务器。希望这篇文章对您有所帮助!
Java 5.0 内置了JMX Java 5.0 已经发布了,这个版本的的变化就像从1.4的变化到5.0的变化一样大.:-)。(其实5.0就是1.5的另一个称呼)。 本文重点介绍Java Management Extension,简称 JMX。 JMX是一组用来监视和管理Java应用程序的工具。 现在开源社区最有名的Jboss应用服务器就是使用JMX来管理的。曾经在灰狐动力上有人分析Jboss源代码时曾说 : 用来管理Jboss的JMX实现可以说是精彩绝伦。(原文已经找不到了)。 另外Jboss也是第一个使用JMX机制来管理的J2EE应用服务器。 在Java 5.0之前JMX是单独发布的,现在已经编程了标准库的一部分。 并且java5.0提供了一个叫做 Jconsole.exe 的JMX 客户端工具。可以在Java 5.0 的bin目录中找到。
搭建模拟环境: 操作系统:CentOS7 内存:1G jdk:1.8.0_131 tomcat:8.0.48 环境准备我们这里就不直接演示了,直接配置tomcat的jmx 1、进入到tomcat 连接 4.2、重启tomcat,测试jmx是否还可以连接上 # . /shutdown.sh 4.2.1、再次连接jmx查看是否可以连接上 数据监控图都查看不了,连接不上 为什会出现这个问题? 有一种方法是设置jmx固定的注册端口和服务端口,通过jar包实现 5、登录tomcat官网(注意,我的tomcat版本是1.8.0的官网上只有1.8.5的也可以使用) 网址:https pid号 12、到这里我们就测试成功了,这样在我们使用zabbix使用jmx监控tomcat的时候就不用担心tomcat重启jmx端口连接不上了
TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled 01 09:19:00 CST 2022]; root of context hierarchy 2022-11-01 09:19:01 [INFO] org.springframework.jmx.export.MBeanExporter :431 : Registering beans for JMX exposure on startup 2022-11-01 09:19:01 [INFO] org.springframework.boot.StartupInfoLogger 01 09:19:00 CST 2022]; root of context hierarchy 2022-11-01 09:19:01 [INFO] org.springframework.jmx.export.MBeanExporter :449 : Unregistering JMX-exposed beans on shutdown Process finished with exit code 0 网上的解决方案: 引入Tomcat
要通过JMX远程监控Tomcat,首先需要进行Tomcat的JMX远程配置。 注意:此配置添加在catalina.bat文件开头的注释行(rem或#)后面即可。 ? 不需鉴权的配置: 先修改Tomcat的启动脚本,windows下为bin/catalina.bat(linux下为catalina.sh),添加以下内容: set JMX_REMOTE_CONFIG=- 需要鉴权的配置: set JMX_REMOTE_CONFIG=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 /conf/jmxremote.access set CATALINA_OPTS=%CATALINA_OPTS% %JMX_REMOTE_CONFIG% 复制并修改授权文件 JAVA_HOME/jre jmxremote.password 添加内容: monitorRole liuke #可自定义 controlRole liuke #可自定义 使用jconsole或jvisualvm测试JMX
前言: 前一段时间apace solr JMX因为配置不当出现远程代码执行漏洞,最近自己在看一套java系统时,发现该系统也存在JMX远程代码漏洞,于是乎就想研究下JMX这种通用型漏洞,下面我就从原理到利用对该漏洞做一个简单的梳理 一、JMX服务和MBean JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。 JMX是一套复杂的机制,由于我们要讲的JMX远程代码漏洞和MBean相关,所以这里我们之介绍jmx和mbean相关的一些基础知识。 JMX是管理扩展,通过JMX我们可以监控管理我们的指定的java程序。但不是所有的java类都能被管理。只有按照特定格式编写的java类才能被jmx原理。这种特定格式机制我们称为Mbean。 JMX漏洞是一个通用型漏洞,如果遇到java系统开启1099端口,或者开启jmx的都可以使用该漏洞测试一下,惊喜就在意外中。
,不要写zabbix服务器的地址 -Djavx.management.builder.initial= -Dcom.sun.management.jmxremote=true # 启用远程监控JMX -Dcom.sun.management.jmxremote.port=12345 # 默认启动的JMX端口号,要和zabbix添加主机时候的端口一致即可 -Dcom.sun.management.jmxremote.ssl LISTEN 9397/java tcp6 0 0 :::12345 :::* LISTEN 9397/java 三、在被监控主机上添加JMX
2.在Hadoop的metrics系统中添加JMX sink JMX sink需要根据Hadoop的metrics接口开发,并嵌入Hadoop运行时环境中。 对于通过构建JMX client来收集JMX metrics,那么最好有一个agent(代理)来监控JMX client是否工作良好,否则如果有些JMX client停止工作,可能会出现一些JMX数据丢失 如果我们使用JMX sink收集数据,则JMX client不需要代理,毕竟数据收集生命周期与守护程序生命周期相同。 比如想获取NameNode相关的JMX,我们可以直接请求http://ip:50070/jmx(ip为HDFS集群中active NameNode所在节点IP地址)获取JMX信息(如果想获取Yarn的JMX JMX相关信息的接口是在类org.apache.hadoop.jmx.JMXJsonServlet中实现的,返回的信息是json结构。
* */ public MBeanInfo getMBeanInfo(); } JMX定义几个类是我们需要看的,其一是Attribute,是jmx封装的name-value 其实就是对一个类的描述,包含了类名className,属性的集合attributes,操作的集合operations,构造器的集合constructors,还一个是通知集合notifications,这个是jmx 然后反射获得,一种反射getter方法 Class cls=this.getClass(); String getterName = "get"+attribute;//jmx
使用 JMX 界面(Java Management Extensions API ),你可以实时的查看你 Confluence 运行实例的状态。 JMX 使用的对象被称 MBeans (Managed Beans) ,通过这个对象来向外暴露你应用的数据,提供资源的的使用情况,数据库延迟等很多有用的信息和数据,能够帮助你诊断你 Confluence 这个指南提供了有关 JMX 界面的一些基本的介绍。 我们的支持小组能够帮你解决有关 Confluence 的具体问题,但是我们不能帮助你设置 JMX 的远程监控,同时我们也不能帮你解释监控中数据的意义是什么。 https://www.cwiki.us/display/CONF6ZH/Live+Monitoring+Using+the+JMX+Interface
JMX 不仅仅用于本地管理,JMX Remote API 为 JMX 添加了远程功能,使之可以通过网络远程监视和管理应用程序。 2. 为什么使用 JMX 技术? JMX 技术提供了对 JVM 状态的监测功能,JMX 已经内置了对 JVM 的监测功能,并且可以监控和管理 JVM,十分方便。 JMX 架构设计优秀,组件化的设计可以自由的扩展。 JMX 技术严格遵守 Java 现有规范如 JNDI 规范。 JMX 可以自由的与其他管理解决方案集成,得益于开放的 JMX API,可以通过 web 服务管理 JMX 中的资源。 3. JMX 已经对 JVM 进行了多维度资源检测,所以可以轻松启动 JMX 代理来访问内置的 JVM 资源检测,从而通过 JMX 技术远程监控和管理 JVM。 JMX 远程管理 可以通过网络协议访问 JMX API,如 HTTP 协议、SNMP(网络管理协议)协议、RMI 远程调用协议等,JMX 技术默认实现了 RMI 远程调用协议。
Boot也提供了对JMX监控的支持。 JMX监控对外暴露的信息相同,不过是使用MBeans容器将应用数据封装管理。 接下来我们看下如何利用JMX获取应用状态信息,以及如何使用Jolokia JMX库对外暴露MBeans的HTTP访问URL。 通过HTTP访问应用的最大并发线程数 分析 只要添加了Spring Boot Actuator库,所有相关的endpoint和管理服务都打开了,包括JMX,我们可以通过设置endpoints.jmx.enabled =false禁止对外提供基于JMX的endpoints;或者通过设置spring.jmx.enabled=false禁止对外提供Spring MBeans。