详解tomcat中的jmx监控

目录

1.概述

2.如何开启tomcat的JMX

3.tomcat如何实现JMX的源码分析


1.概述

本文是博主JAVA监控技术系列文章的第二篇,前面一篇文章中我们介绍了JAVA监控技术的基石——jmx:

【JMX】JAVA监控的基石-CSDN博客

本文我们将从使用和源码实现两个方面聊一下jmx的落地实现范例——tomcat中的jmx。

tomcat作为一个web server,其选用jmx来实现监控功能。之所以选择jmx是因为jmx是java se原生的能力,不需要第三方依赖,在web server这种基础组件中,选用原生的技术可以避免很多三方依赖带来的不便。

2.如何开启tomcat的JMX

jmx是由JVM来支持实现的标准,所以开启jmx本质上就是通过配置启动参数的方式来实现的,例如,以下是一个简单的 Java 命令,启用了 JMX 监听,并配置了 JMX 服务器的地址和端口:

java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9999 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     -jar myapplication.jar

tomcat本质也是个Java程序,所以也是通过配置启动参数来开启jmx的。本文是基于Windows环境来配置的,Linux环境其实也大差不差。配置Catalina.bat,在Execute The Requested Command下面加上下面的配置:

set JAVA_OPTS=%JAVA_OPTS% -Djava.rmi.server.hostname=192.168.56.1 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

然后启动tomcat,打开jconsole:

连接上我们启动的这个tomcat,MBean列表里面可以看到tomcat的所有MBean,对tomcat源码熟悉的读者会发现,tomcat的核心组件都以MBean的方式被注册进JMX Server中了。

3.tomcat如何实现JMX的源码分析

首先博主去github上下载了tomcat7.0.105版本的源码。前面我们聊过jmx,要使用jmx,就要先注册相关的MBean。tomcat里面有一个jmxEnabled接口,这个接口就是用来实现MBean的注册的。它定义了两个方法,一个用来注册MBean,一个用来卸载MBean。

这个接口的实现类是LifecycleMBeanBase,这个类里实现了注册和卸载MBean的方法。对tomcat源码有了解的读者对这个类会很熟悉(当然不了解也别怕),LifecycleMBeanBase这个类是tomcat中用来管理各个组件的生命周期的,也就是说这个组件里会实现一些在各个组件初始化或者销毁的时候要做的额外动作。

来我们好好读一下这里的源码:

protected void initInternal() throws LifecycleException {// If oname is not null then registration has already happened via// preRegister().if (oname == null) {获取MBeanServermserver = Registry.getRegistry(null, null).getMBeanServer();//注册MBeanoname = register(this, getObjectNameKeyProperties());}}
//注册MBean的方法   
protected final ObjectName register(Object obj,String objectNameKeyProperties) {
​// Construct an object name with the right domainStringBuilder name = new StringBuilder(getDomain());name.append(':');name.append(objectNameKeyProperties);
​ObjectName on = null;
​try {on = new ObjectName(name.toString());//将自己注册到MBeanServer中Registry.getRegistry(null, null).registerComponent(obj, on, null);} catch (MalformedObjectNameException e) {log.warn(sm.getString("lifecycleMBeanBase.registerFail", obj, name),e);} catch (Exception e) {log.warn(sm.getString("lifecycleMBeanBase.registerFail", obj, name),e);}
​return on;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/257668.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣回溯篇3

算法学习——LeetCode力扣回溯篇3 491. 非递减子序列 491. 非递减子序列 - 力扣(LeetCode) 描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。…

android 控制台输出 缺失

问题 android 控制台输出内容缺失 详细问题 笔者进行android开发,期望控制台打印Log日志或是输出内容 Log.i("tag","content");或 System.out.println("content")但是实际上,上述内容并没有按照笔者期望打印 解决方…

PhP+vue企业原材料采购系统_cxg0o

伴随着我国社会的发展,人民生活质量日益提高。互联网逐步进入千家万户,改变传统的管理方式,原材料采购系统以互联网为基础,利用php技术,结合vue框架和MySQL数据库开发设计一套原材料采购系统,提高工作效率的…

Stable Diffusion 模型下载:ToonYou(平涂卡通)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

linux系统下vscode portable版本的python环境搭建003:venv

这里写自定义目录标题 python安装方案一. 使用源码安装(有[构建工具](https://blog.csdn.net/ResumeProject/article/details/136095629)的情况下)方案二.使用系统包管理器 虚拟环境安装TESTCG 本文目的:希望在获得一个新的系统之后&#xff…

电脑监控屏幕软件有哪些(监控电脑屏幕的软件)

随着信息技术的迅猛发展,电脑屏幕监控软件已成为企业、家庭以及教育机构保护数据安全、提升工作效率以及进行行为分析的重要工具。本文将详细介绍几款主流的电脑屏幕监控软件,包括它们的功能、特点以及适用场景,帮助读者更好地了解并选择合适…

对进程与线程的理解

目录 1、进程/任务(Process/Task) 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理(Memory Manage) 4、线程(Thread)…

第二十八回 施恩重霸孟州道 武松醉打蒋门神-可用于生产环境的Python Web框架:Pyramid

施恩给武松讲了他的烦心事,他在快活林的酒肉店被蒋门神霸占了。希望武松能帮他出气。施恩的父亲也从屏风后走出来,让施恩拜武松为兄长。 武松要去打蒋门神,跟施恩约好了“无三不过望”,望子就是酒旗,意思看到酒旗就要…

书城项目历程记录2|最后阶段记录

2024年1月31日 p270-276 1.免用户名登录和注销(知识点cookie和session) 在学习了cookie和session之后,实现了免用户名登录和注销操作。 免用户名就是在本次session登录成功之后,对session进行setAttribute操作,jsp文…

linux系统下vscode portable版本的c++/Cmake环境搭建001

linux系统下vscode portable版本的Cmake环境搭建 vscode portable 安装安装基本工具安装 build-essential安装 CMake final script code安装插件CMake Tools & cmakeC/C Extension Pack Testsettings,jsonCMakeLists.txt调试和运行工具 CG 目的:希望在获得一个新…

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树

1、设备树文件的路径 1)、创建linux中的设备树头文件 在“my_linux/linux-5.4.31/arch/arm/boot/dts/”目录中,以“stm32mp15xx-edx.dtsi”为蓝本,复制一份,并命名为 “stm32mp157d-atk.dtsi”,这就是我们开发板的设备树头文件。…

CSS3 基本语法

CSS3 基本语法 1. CSS3 新增长度单位 rem 根元素字体大小的倍数,只与根元素字体大小有关。vw 视口宽度的百分之多少 10vw 就是视口宽度的 10% 。vh 视口高度的百分之多少 10vh 就是视口高度的 10% 。vmax 视口宽高中大的那个的百分之多少。(了解即可&am…

HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL

下载资源 对于这款图形化工具,博主建议通过小皮面板(phpstudy)来下载即可,也是防止你下载到钓鱼软件,小皮面板(phpstudy)如果你不懂是什么,请看下面链接这篇博客 第二篇:…

装饰工程|装饰工程管理系统-项目立项子系统的设计与实现|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)

装饰工程管理系统-项目立项子系统目录 目录 基于Springboot的装饰工程管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 (2)合同报价管理 (3)装饰材料总计划管理 (4&#xff0…

bert-vits2本地部署报错疑难问题汇总

环境: bert-vits2.3 win 和wsl 问题描述: bert-vits2本地部署报错疑难问题汇总 解决方案: 问题1: Conda安装requirements里面依赖出现ERROR: No matching distribution found for opencc1.1.6 解决方法 需要在 Python 3.11 上使用 Op…

Dynamo设置明细表字段格式——保留小数位数

Hello大家好!我是九哥~ 今天简单分享一个API的用法,就是设置明细表的中字段的字段格式。 本次呢,主要介绍下如何通过Dynamo设置长度、面积等几种字段的格式,设置小数位数的显示,如下图: 当然了&#xf…

OpenMVG(特征匹配、照片组重建点云、GPS位置信息、GMS)

目录 1 图像的特征匹配 2 图像中提取GPS位置信息 2.1 写入GPS信息到图像中 2.2 读取带有GPS的图像 3 SIFT/AKAZE/AKAZE_MLDB特征提取对比 4 GMS Filter 5 将球形全景图转换为6个透视视图 6 照片组重建点云 1 图像的特征匹配 #include "openMVG/features/feature.…

ELAdmin 部署

后端部署 按需修改 application-prod.yml 例如验证码方式、登录状态到期时间等等。 修改完成后打好 Jar 包 执行完成后会生成最终可执行的 jar。JPA版本是 2.6,MyBatis 版本是 1.1。 启动命令 nohup java -jar eladmin-system-2.6.jar --spring.profiles.active…

vmware workstation群晖虚拟机vmdk文件导出

为了防止群晖虚拟机中整个挂掉,里面的文件导不出来,尝试直接从vmdk中获取内容。 1、想采用diskgenius去读取文件,发现volume1是空的。只能读取群晖的系统文件。 2、选择另一个linux系统的虚拟机,选择对应的vmdk 3、如果有文件管理…

二叉树的层序遍历II

1.题目 这道题是2024-2-15的签到题,题目难度为中等。 考察的知识点为BFS算法(树的层序遍历) 题目链接:二叉树的层序遍历II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节…