当前位置: 首页 > 知识库问答 >
问题:

使用Java代码访问Tomcat监视器

锺离俊雄
2023-03-14

我对JMX很陌生。我试图记录tomcat的统计数据,如使用的线程、缓存、会话和其他标准值。我正试图用java代码实现这一点。

到目前为止,我已经做了以下事情。(我正在尝试访问windows上本地tomcat 6.0监视器的值)

1) 我在catalina中添加了以下选项。bat set CATALINA_OPTS=-Dcom。太阳经营jmxremote-Dcom。太阳经营jmxremote。端口=9004-Dcom。太阳经营jmxremote。ssl=false-Dcom。太阳经营jmxremote。验证=false

之后,我重启了tomcat服务器。

2) 然后我编写了以下代码。

package com.ss.fg;

import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;

public class SystemConfigManagement
{
    static MBeanServer connection = ManagementFactory.getPlatformMBeanServer();
    public static void main(String[] args) throws Exception {
        getActiveSession();    
    }  
    public static void getActiveSession()throws Exception
    {
        ObjectName name=new ObjectName("Catalina:type=Manager,path=/MMDisplay,host=localhost");
        String attrValue = ManagementFactory.getPlatformMBeanServer().getAttribute(name, "activeSessions").toString();
        System.out.println(attrValue);

    }
}

我甚至尝试了上下文而不是路径。

我得到以下例外

Exception in thread "main" javax.management.InstanceNotFoundException: Catalina:type=Manager,path=/MMDisplay,host=localhost
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(Unknown Source)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(Unknown Source)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(Unknown Source)
    at com.softsmith.floodgates.SystemConfigManagement.getActiveSession(SystemConfigManagement.java:15)
    at com.softsmith.floodgates.SystemConfigManagement.main(SystemConfigManagement.java:10)

我如何解决这个问题?

我应该添加一些jarhtml" target="_blank">文件,还是做一些其他设置。。

请帮忙

共有2个答案

曾歌者
2023-03-14

当我使用

 MBeanServer connection = ManagementFactory.getPlatformMBeanServer();

实际上,我连接到运行我的程序的JVM的MBean服务器,而不是我的tomcat实例的MBean服务器,因此它不知道Catalina MBean。因此,我尝试远程连接到jmx,但出现如下错误:

java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is....

现在我解决了:

首先,我将catalina-jmx-remote.jar添加到Tomcat的TOMCAT_HOME/lib目录,然后在server.xml上配置侦听器,我在标签下添加了以下片段:

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" useLocalPorts="true" />

最后,我在我的卡特琳娜中设置了以下句子。bat:

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
云弘壮
2023-03-14

使用时

 MBeanServer connection = ManagementFactory.getPlatformMBeanServer();

实际上,您连接的是运行程序的JVM的MBean服务器,而不是tomcat实例的MBean服务器,因此它不知道Catalina MBean。

要建立与远程jvm的连接,请尝试以下操作:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://servername:9999/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(url);
connector.connect();
MBeanServerConnection server = connector.getMBeanServerConnection();
//do work here
ObjectName name = new ObjectName("Catalina:type=Manager,path=/manager,host=localhost");
String attrValue = mb.getAttribute(name, "activeSessions").toString();
System.out.println(attrValue);
//..and don't forget to close the connection
connector.close();

如果错误仍然存在,请确保使用正确的对象名称。

 类似资料:
  • 问题 你有一些C函数已经被编译到共享库或DLL中。你希望可以使用纯Python代码调用这些函数, 而不用编写额外的C代码或使用第三方扩展工具。 解决方案 对于需要调用C代码的一些小的问题,通常使用Python标准库中的 ctypes 模块就足够了。 要使用 ctypes ,你首先要确保你要访问的C代码已经被编译到和Python解释器兼容 (同样的架构、字大小、编译器等)的某个共享库中了。 为了进行

  • 问题内容: AWS在Lambda函数中引入了用于访问的环境变量。我找不到任何文档来说明如何使用Java从Lambda函数访问环境变量。谁能帮我? 问题答案: 您可以通过以下方式获得它们:

  • 问题内容: 我不明白“无法​​访问的代码”是什么意思? 在我的代码的最后一行中,它表示无法访问的代码。 } 问题答案: 这里的循环: 解析为,因为从未修改过的值。因此,(在您的情况下)之后出现的任何代码均被视为 无法访问 。

  • 我需要从后台运行的服务中截图。屏幕截图可以是前台的应用程序,即使它不是我的应用程序,这就是为什么我不能使用DrawingCache。我到处找了找,找到了这个 任何帮助都是非常感谢的。

  • 问题内容: 我在Windows 7上运行Tomcat 5.5实例(端口:8089)。 如果我打开http:// localhost:8089 / ,服务器将正常运行,但是在http://192.168.1.100:8089/上却给我一个错误(连接被拒绝) 我以为这是防火墙问题…所以我禁用了它,但是我仍然没有运气。 提前致谢。 解决了: 在连接器字符串中添加了 地址=“ 0.0.0.0” ,就可以了

  • 我已经检查了netstat并且能够找到处于侦听状态端口8080 C:\users\administrator>netstat-ano findstr“8080” TCP 0.0.0.0:8080 0.0.0.0:0侦听540 如有任何帮助,我们将不胜感激。谢谢你。