Tag: jmx

在Windows上使用JDK 1.4进行Tomcat 5.5监控

根据此文档http://tomcat.apache.org/tomcat-5.5-doc/monitoring.html#Enabling_JMX_Remote应该可以远程监视在JDK 1.4上运行的Tomcat 5.5服务器,但是在搜索了整个Web并尝试之后多个操作系统我还没有比第一天更进一步。 到目前为止我的结果是。 用标准设置Tomcat -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=%my.jmx.port% -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=localhost 将在JDK 1.5及更高版本上正常运行。 调试到Tomcat使我可以访问MBeanServer,但我无法从外部连接到它。 根据维基百科http://en.wikipedia.org/wiki/Java_Management_Extensions的信息,我只需要一个工作连接器,我不知道如何使其工作。 尝试根据设置HTTP适配器 完全没有效果。 当我调试它几乎看起来像属性handler.list和mx。*只是被忽略。 我知道我应该只使用JDK 1.5,我的担忧就会消失,但我们有一个很大的JDK 1.4遗留安装基础,如果我们可以使用JMX监控,它会很棒。 最终我想使用JConsole或JVisualVM连接到Tomcat,据我所知,连接URL看起来像 service:jmx:rmi:///jndi/rmi://localhost:8888/jmxrmi 8888是我的JMX端口。 如果有人对如何深入研究问题的根源有一些建议或想法,那将非常有帮助。

如何查找从属节点中的CPU负载(CPU利用率百分比)

您正在开发java中的负载平衡算法。 在我的系统中,将有一个主节点和从节点列表,其中主节点将传入请求分发给其一个从节点。 我想在每个从节点中找到CPU负载(所用CPU的百分比)。 这样主节点就可以有效地将请求分发给其最小负载的从节点之一。 任何人都可以建议我如何找到它。 The getSystemLoadAverage() method in JMX 可用于查找当前系统的cpu负载。 是否有可能使用相同的方法来查找从站中的负载..如果可能请建议我如何找到它。 如果不可能,请建议我采取其他一些方法来做同样的事情。 如果有人为此提供正确答案,我将更加感激。

如何从jmx客户端访问dynamicmbeans

我正在为我们的产品中的JMX接口编写一些测试用例。 我可以从标准MBean访问属性(遵循sun教程 )。 但是,我似乎无法访问动态MBean。 这些属性完全(可读/可写)来自JConsole。 JMXConnector jmxc = getJMXConnector(); // Takes care of our connection MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); ObjectName mbeanName = new ObjectName(“com.xyz.prodname:type=LogManager”); // Up to this point, the logic is the same as the working logic. In our working logic, // DynamicMBean is replace with our MBean interface class. DynamicMBean mbean = (DynamicMBean)JMX.newMBeanProxy(mbsc, […]

插入MBean拦截器

我正在一个实现MBean的java项目中工作,我需要拦截MBean并在注册表之前更改/添加它们的属性。 示例: domainName:name = myMBean – > domainName:name = myMBean1,type = myType 我发现这个链接提供了如何应用拦截器,然后默认拦截器,但我不知道如何在代码中。 提前致谢。

JMX身份validation – 基于角色的MBean操作

我已经通过RMI实现了JMXAuthenticator for JMX身份validation,但是我不确定如何创建角色以允许readonly / readwrite访问级别。 例如,在JMXAuthenticator.authenticate我有自定义身份validation逻辑,并希望这可以确定访问角色。 我尝试了以下但在JConsole中执行操作时没有任何区别: @Override public Subject authenticate(Object credentials) { Subject subject = new Subject(); JMXPrincipal p; //…my logic String accessLevel = myCustomLogic(); if (accessLevel.equals(“admin”)) { p = new JMXPrincipal(“adminrole”); } else { p = new JMXPrincipal(“basicrole”); } subject.getPrincipals().add(p); return subject; } 然后我创建了一个包含的访问文件jmxaccess.properties adminuser readwrite basicuser readonly 和jmx.management.properties ,其中包含com.sun.management.jmxremote.access.file=PATH TO ACCESS FILE […]

无法使用JBOSS 7.x中的JMX连接到Tigase

我在使用JBOSS 7.x中的JMX连接到Tigase时遇到问题。 对于连接我使用下一个代码: import java.util.Hashtable; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; JMXServiceURL u = new JMXServiceURL(“service:jmx:rmi:///jndi/rmi://” + HOST_NAME + “:” + PORT + “/jmxrmi”); Hashtable env = new Hashtable(); String[] credentials = new String[] {“login”,”pass”}; env.put(JMXConnector.CREDENTIALS, credentials); JMXConnector jmxConnector = JMXConnectorFactory.connect(u, env); 在tigase init.properties我添加了 –monitoring=jmx:9050,http:9080,snmp:9060 在我添加的java选项的tigase启动脚本中 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname= 有趣的是,它都是从简单的Java应用程序开始,但不能从jboss开始 我使用java openJDK7和JBOSS AS 7.0.2,当我尝试创建连接时,我在JMXConnectorFactory.connect(u,env)上得到下一个错误: java.io.IOException: Failed […]

RMI和JMX套接字工厂

我正在尝试在我的Java应用程序中启动嵌入式JMX服务器。 我想为RMI注册表和实际的RMI流量使用相同的端口(如果你愿意,可以使用JMX流量)。 显然这是可能的,因为RMI注册表本身只是一个远程对象 。 增加的难点是我需要使用Socket Factories,因为我需要绑定到特定的NIC。 我从以下开始: int registryPort = 3012; int jmxPort = 3012; // use the same port 这是我的服务器套接字工厂。 相当直接的东西: public class MyRMIServerSocketFactory implements RMIServerSocketFactory { private final InetAddress inetAddress; public MyRMIServerSocketFactory(InetAddress inetAddress) { this.inetAddress = inetAddress; } @Override public ServerSocket createServerSocket(int port) throws IOException { return new ServerSocket(port, 0, inetAddress); } @Override […]

JMX端口动态分配

我有16个Java进程,在一台机器上运行相同的主方法和参数。 我希望通过JConsole远程监控这些。 像-Dcom.sun.management.jmxremote.port=5000这样的硬编码端口号将无法工作,因为这些进程使用相同的配置,并且无法使用相同的端口。 JVM是否可以为16个进程中的每个进程动态选择不同的端口?

标准MBean的描述

我想在JBoss jmx-console中使我的标准MBean详细。 DynamicMBean有getMBeanInfo()来做。 方法返回MBeanInfo,其中包含MBean的描述。 但是我怎么能为Standard MBean做同样的事情呢? 例如,我有以下MBean接口: public interface MyMBean { String f(); } ……以下实施: public class My implements MyMBean { public String f() { return “test”; } } 在这样的例子中应该怎么做才能添加描述? 谢谢

jmx / jstatd通过ssh隧道访问远程机器

我想使用jmx或jstatd通过ssh隧道(到EC2机器)使用visualvm app。 我该怎么做呢? 以下是已尝试(和失败)的列表:(顺便说一下:如果视觉vm不合适,如何在远程计算机上找到内存泄漏?) jstatd:尝试: 我在EC2机器上设置了jstatd服务器(应用程序已在其上运行)然后我设置隧道映射本地端口3333到远程端口1099在VisualVM中我尝试使用端口3333上的jstatd进行连接…没有进程在EC2上出现了 这个链接说jstatd开辟了另一个端口: http : //rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm …所以我从本地主机隧道传输了这个端口远程。 我重新启动了视觉vm …仍然没有 当我尝试使用folloing命令列出从EC2运行的进程时: jps -l -m -v rmi://localhost ……我得到了一份流程清单 当我在家用机器上列出它时 jps -l -m -v rmi://localhost:3333 ……我没有! 那么,rmi端口是不是与jstatd端口(3333)进行隧道连接……? jmx尝试: 我使用以下命令在远程计算机上启动了应用程序: java -Dcom.sun.management.jmxremote.port=3333 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false\ -cp :post/* …该应用程序工作,所以我隧道本地端口3333到远程3333 然后我尝试从visual vm界面设置一个jmx链接到localhost:3333:…它弹出一个错误说: cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi 如果我需要设置删除RMI服务器的链接,我不知道该怎么做。 JMXMP尝试: 这有希望,但事情并不完全正确: 首先,我将jmx_remote jar添加到类路径中,并使用与上面显示的JMX情况相同的命令在远程计算机上启动应用程序。 我在oracle下载链接找到了jar 我从本地端口3333到远程端口3333设置了一个ssh隧道。然后我在calsspath中使用相同的jmx_remote文件启动了visualvm。 visualvm […]