一文详解tomcat中的jmx监控

 更新时间:2024年06月03日 11:45:24   作者:_BugMan  
本文我们将从使用和源码实现两个方面聊一下jmx的落地实现范例——tomcat中的jmx,tomcat作为一个web server,其选用jmx来实现监控功能,之所以选择jmx是因为jmx是java se原生的能力,本文将详细的给大家介绍一下tomcat中的jmx监控,需要的朋友可以参考下

1.概述

本文我们将从使用和源码实现两个方面聊一下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) {
            获取MBeanServer
            mserver = Registry.getRegistry(null, null).getMBeanServer();
            //注册MBean
            oname = register(this, getObjectNameKeyProperties());
        }
    }
//注册MBean的方法   
protected final ObjectName register(Object obj,
            String objectNameKeyProperties) {
​
        // Construct an object name with the right domain
        StringBuilder 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;
    }

以上就是一文详解tomcat中的jmx监控的详细内容,更多关于tomcat jmx监控的资料请关注脚本之家其它相关文章!

相关文章

  • Tomcat配置HTTPS访问的实现步骤

    Tomcat配置HTTPS访问的实现步骤

    本文主要介绍了Tomcat配置HTTPS访问的实现步骤,在tomcat中存在两种证书验证情况单向验证和双向验证,下面就详细的介绍一下这两种情况的配置,感兴趣的可以了解一下
    2022-07-07
  • 一次tomcat自动关闭的bug解决

    一次tomcat自动关闭的bug解决

    这篇文章主要给大家介绍了一次关于tomcat自动关闭的bug的解决过程,文中通过示例代码介绍的非常详细,对大家学习或者使用tomcat具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Apache Tomcat服务器版本号隐藏的几种方法

    Apache Tomcat服务器版本号隐藏的几种方法

    本文主要介绍了Apache Tomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • TongWeb替换tomcat的实现步骤

    TongWeb替换tomcat的实现步骤

    随着技术的发展和业务需求的变化,有时候我们需要将Web项目从Tomcat迁移到TongWeb,这篇文章主要介绍了TongWeb替换tomcat的实现步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Tomcat安全设置 win2003 下tomcat权限限制

    Tomcat安全设置 win2003 下tomcat权限限制

    Tomcat安全设置 win2003 下tomcat权限限制,需要的朋友可以参考下。
    2011-03-03
  • Tomcat Server的设计和实现:StandardServer详解

    Tomcat Server的设计和实现:StandardServer详解

    文章主要介绍了Tomcat中StandardServer的整体类依赖结构,通过解析server.xml文件来理解Server的相关配置属性及其作用,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • Tomcat静态资源缓存实现步骤

    Tomcat静态资源缓存实现步骤

    Tomcat中配置静态资源缓存通过设置HTTP响应头来实现,可以控制浏览器如何缓存静态资源,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 浅谈Tomcat乱码与端口占用的解决方案

    浅谈Tomcat乱码与端口占用的解决方案

    这篇文章主要介绍了浅谈Tomcat乱码与端口占用的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Tomcat监测脚本的实现示例

    Tomcat监测脚本的实现示例

    这篇文章主要给大家介绍了Tomcat监测脚本的实现方法,文中给出了详细的示例代码和介绍,对大家具有一定的参考价值,有需要的朋友们下面来一起学习学习把。
    2017-01-01
  • tomcat双击startup.bat一闪而过(闪退)的问题解决

    tomcat双击startup.bat一闪而过(闪退)的问题解决

    本文主要介绍了tomcat双击startup.bat一闪而过(闪退)的问题解决,可能是tomcat找不到你的jdk环境配置路径,下面就来介绍一下解决方法,感兴趣的可以了解一下
    2024-05-05

最新评论