返回> 网站首页 

Tomcat多项目启停控制 - JMX的使用

yoours2025-01-24 19:24:08 阅读 151

简介一边听听音乐,一边写写文章。

一、Tomcat多项目配置

    conf目录下,修改server.xml文件

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="soskp.com" appBase="" unpackWARs="false" autoDeploy="false">
          <Alias>www.soskp.com</Alias>
        <Context path="" reloadable="true" docBase="C:/webapps/soskp" name="soskp" sessionCookieName="soskp" />
      </Host>

      <Host name="0.soskp.com" appBase="" unpackWARs="false" autoDeploy="false">
          <Alias>images.yoours.com</Alias>
        <Context path="" docBase="C:/webapps/images" name="images" reloadable="false" />
      </Host>

      <Host name="1.soskp.com" appBase="" unpackWARs="false" autoDeploy="false">
          <Alias>manage.yoours.com</Alias>
        <Context path="" docBase="C:/webapps/manage" name="manage" reloadable="true" sessionCookieName="manage_soskp" />
      </Host>

      <Host name="2.soskp.com" appBase="" unpackWARs="false" autoDeploy="false">
          <Alias>k.yoours.com</Alias>
        <Context path="" docBase="C:/webapps/k" name="k" reloadable="true" sessionCookieName="k_soskp" privileged="true" />
      </Host>

     </Engine>

    

二、JMX配置

    bin目录下创建setenv.bat文件,内容:

    set CATALINA_OPTS=%CATALINA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false


三、java代码示例

    try {
            final String JMX_URL = "service:jmx:rmi:///jndi/rmi://localhost:9010/jmxrmi";

            // 连接到Tomcat的JMX服务
            JMXServiceURL url = new JMXServiceURL(JMX_URL);
            JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
            MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();
            ObjectName query = new ObjectName("Catalina:type=Host,*");
            Set<ObjectName> contexts = mbsc.queryNames(query, null);

            // 枚举项目
            for (ObjectName context : contexts) {
                String hostName = context.getKeyProperty("host");
                System.out.println("Host Name: " + hostName);
                if(hostName.compareTo("1.soskp.com")!=0)
                    continue;

                // 获取项目运行状态
                String stateName = (String) mbsc.getAttribute(context, "stateName");
                System.out.println("  State Name: " + stateName);
                String name = (String) mbsc.getAttribute(context, "name");
                System.out.println("  name: " + name);

                // 操作 Host
                if (stateName.equals("STOPPED")) {
                    // 启动 Host
                    mbsc.invoke(context, "start", null, null);
                    System.out.println("  Started Host: " + hostName);
                } else if (stateName.equals("STARTED")) {
                    // 停止 Host
                    mbsc.invoke(context, "stop", null, null);
                    System.out.println("  Stopped Host: " + hostName);
                }

                // 添加别名
                String alias = "alias." + hostName;
                mbsc.invoke(context, "addAlias", new Object[]{alias}, new String[]{"java.lang.String"});
                System.out.println("  Added Alias: " + alias + " to Host: " + hostName);
                break;
            }

            // 关闭JMX连接
            jmxConnector.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


四、MBean

    在 Tomcat 中,JMX(Java Management Extensions)用于监控和管理各种组件。每个组件在 JMX 中都有一个唯一的标识符,称为 ObjectName。ObjectName 的格式通常是 domain:key=value,key=value,...,其中 domain 是命名空间,key=value 对是属性键值对。

    Catalina:type=Server 的来源

        Domain (Catalina): 这是 Tomcat 的默认 JMX 域名。Tomcat 使用 Catalina 作为其 JMX 域名来区分其他应用程序或服务的 MBeans。

    Type (Server): 这是 MBean 的类型。Server 类型代表 Tomcat 的顶层服务器组件,即 StandardServer 类。

    常见的 Tomcat JMX MBeans

    Tomcat 的 JMX MBeans 通常包括以下几种类型,每种类型都有其特定的 ObjectName:


Server:

    ObjectName: Catalina:type=Server

    描述: 代表整个 Tomcat 服务器实例。

Service:

    ObjectName: Catalina:type=Service,name=Catalina

    描述: 代表 Tomcat 的服务组件,通常只有一个服务。

Connector:

    ObjectName: Catalina:type=Connector,port=8080,protocol="HTTP/1.1"

    描述: 代表 Tomcat 的连接器组件,用于处理 HTTP/HTTPS 请求。

Engine:

ObjectName: Catalina:type=Engine,name=Catalina

    描述: 代表 Tomcat 的引擎组件,负责处理请求的路由和分发。

Host:

    ObjectName: Catalina:type=Host,host=localhost,service=Catalina

    描述: 代表 Tomcat 的虚拟主机组件,每个虚拟主机可以托管多个 Web 应用程序。

Context:

    ObjectName: Catalina:type=Context,path=/myapp,host=localhost,service=Catalina

    描述: 代表 Tomcat 中部署的 Web 应用程序上下文。


示例 ObjectName 解释

     Catalina:type=Server:

     Domain: Catalina

    Type: Server

    描述: 这个 ObjectName 代表整个 Tomcat 服务器实例,可以通过它获取服务器级别的信息。

    Catalina:type=Connector,port=8080,protocol="HTTP/1.1":


Domain: Catalina

Type: Connector

Port: 8080

Protocol: HTTP/1.1

描述: 这个 ObjectName 代表监听 8080 端口的 HTTP 连接器。

如何查找 MBeans

你可以使用 JConsole 或 VisualVM 等工具连接到 Tomcat 的 JMX 服务,浏览和查找所有可用的 MBeans 及其 ObjectName。这些工具提供了图形界面,方便你查看和操作 MBeans。


五、JConsole

     查找 MBeans,启动 jconsole:

    连接到 Tomcat 的 JMX 服务:

    输入 JMX URL: service:jmx:rmi:///jndi/rmi://localhost:12345/jmxrmi

    连接后,你可以在 MBeans 树中查看所有可用的 MBeans 及其 ObjectName。

    如图:

    


微信小程序扫码登陆

文章评论

151人参与,0条评论