我对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">文件,还是做一些其他设置。。
请帮忙
当我使用
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"
使用时
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 如有任何帮助,我们将不胜感激。谢谢你。