【问题标题】:JmxResource published with simplejmx does not appear in JConsole使用 simplejmx 发布的 JmxResource 未出现在 JConsole 中
【发布时间】:2014-04-11 13:31:01
【问题描述】:

我正在使用simplejmx 发布我的JMX Resources

我有jmx-config.xml

<bean id="beanPublisher" class="com.j256.simplejmx.spring.BeanPublisher">
    <property name="jmxServer" ref="jmxServer" />
</bean>

<bean id="jmxServer" class="com.j256.simplejmx.server.JmxServer"
    init-method="start" destroy-method="stop">
    <property name="registryPort" value="8123" />
</bean>

我正在启动我的JBoss 应用程序,一切正常:

15:20:11,860 INFO  [org.springframework.beans.factory.support.DefaultListableBeanFactory] (MSC service thread 1-8) Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1be30160: defining beans [...,beanPublisher,jmxServer,...]; root of factory hierarchy

我创建了一个简单的类。

package com.mypckg.jmx;

import com.j256.simplejmx.common.JmxAttributeField;
import com.j256.simplejmx.common.JmxResource;

@JmxResource(description = "Blah1", domainName = "Blah2", beanName = "Blah3")
public class DummyJMX {

    @JmxAttributeField(description = "Blah4")
    private int var = 3;
}

我开始JConsole,我选择JBoss 应用程序,我要去MBeans。这就是我所看到的:

*

可能我的DummyJMX 课程还没有发布(或者我找不到它)。

关于我忘记了哪一步?

提前谢谢你


编辑:


编辑:

@安德烈·斯特凡

我使用您的链接时遇到的错误:

@格雷

我使用 localhost:8123 时遇到的错误:

【问题讨论】:

  • 我没有使用过 j256 jmx 服务器,但是由于在服务器创建时指定了一个端口,您不应该将 JConsole 连接到 JBoss 以外的其他东西吗?
  • @AndreiStefan 我什至几乎可以肯定,你是对的,但是......当我的 JBoss 服务器关闭时,我可以在 JConsole 中选择 2 个东西,当我运行我的服务器时,只有一个更多的。我为我的问题添加了屏幕截图。
  • 不要选择本地进程,而是尝试使用远程进程。将其用作 JMX URL:service:jmx:rmi://jndi/rmi://localhost:8123/jmxrmi
  • 您好,我试过了,但它不起作用。我编辑了我的帖子并粘贴了一个打印屏幕。我检查了这个 URL 的Using JConsole 语法,看起来不错。

标签: java spring jmx jconsole simplejmx


【解决方案1】:

在 JConsole 中尝试以下 url,带有远程进程选项:service:jmx:rmi:///jndi/rmi://localhost:8123/jmxrmi

这和我在 cmets 中提供的有点不同。

【讨论】:

  • 谢谢。它给出了同样的错误。你认为这可能是/ 的问题吗?如果它改变了一些东西,我正在使用 Windows。
  • 我提供的 URL 在一个简单的 Spring 项目中适用于我,该项目使用您的确切代码和配置。在将它添加到我的配置后,我可以在 JConsole 中看到 bean:&lt;bean id="dummy" class="com.mypckg.jmx.DummyJMX" /&gt;(我假设你的配置中有这个)。
  • 在我的代码中,这个 bean dummy 被注释掉了。我只想设置我的服务器并验证我是否能够连接到JConsole
  • 我取消了它的注释。尽管如此,我还是无法与JConsole 联系。二,不是很聪明的问题: 1. proxy 有问题吗? 2. 我应该提供任何username/password 吗?在文档中仅在特定情况下使用它。
  • 现在我认为它可能与 JBoss 相关......但不确定是什么。您可以在独立项目中尝试相同的代码和配置,而不是 .war 和 JBoss 之外。
【解决方案2】:

最后,我使用JConsole 连接到我的JMX Beans

很可能,我在开始使用simplejmx 时做错了什么。

我没有改变很多东西。我保留了jmx-config 文件,我仍然使用1.8simplejmx 版本。

我可以轻松地连接到这个 bean locally - 我不知道为什么我之前不能这样做。你能告诉我,为什么在你看来它不应该是local process

下面,可以看到我的JMX Bean出现在JConsole中:

【讨论】:

  • 视情况而定。简而言之,我的问题是:what to do to make it works。最后,它作为一个本地进程工作,您的答案建议使用远程进程。我无法弄清楚为什么它一开始就不起作用。如果您有任何想法,这里的正确答案是什么,请不要犹豫回答我的问题。
  • 我的回答明确表示它不会显示为本地进程。这是一种不同的注册机制。正如我的回答所说,如果您希望在本地看到它,您应该使用平台 mbean 服务器。
【解决方案3】:

可能我的 DummyJMX 类尚未发布(或者我只是找不到它)。

当您为JmxServer 使用registryPort 配置时,它不会显示在Jconsole 下的“本地进程”列表中。它将能够通过localhost:8123 作为“远程进程”进行访问。如果您使用的是 Linux 机器,您可以使用 netstat -an | grep LISTEN 查看您的应用程序正在侦听哪些端口。如果您在列表中没有看到 8123,那么可能它已经配置了 RMI 服务器?

如果您想使用 确实 显示为本地进程的平台 mbean-server,请使用最近(4/2014)发布的 1.9 版中的新设置器或构造器。不幸的是,SimpleJMX 无法以编程方式注册自身,因此它显示在进程列表中——这不是 JVM 导出的代码。

<bean id="jmxServer" class="com.j256.simplejmx.server.JmxServer"
    init-method="start" destroy-method="stop">
    <property name="usePlatformMBeanServer" value="true" />
</bean>

【讨论】:

  • 嗨,我想保持这种方式。我试过localhost:8123,但它给了我一个错误。我编辑了我的帖子。
  • 当我尝试使用 usePlatformMBeanServer 时,它给了我一个错误 [...] org.springframework.beans.factory.BeanCreationException: Error creating bean with name "beanPublisher" [...] Bean property 'setUsePlatformMBeanServer' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 。我将sipmle jmx 版本更改为1.9
  • 我不明白这个@GirlyGirl。我发布的代码对我有用。你确定你用的是1.9?请注意,该属性不是 setUsePlatformMBeanServer,而是usePlatformMBeanServer。是这个问题吗?
  • 我不明白,为什么我在这里粘贴setUsePlatformMBeanServer。我用了你的一段代码。错误当然是关于字段 usePlatformMBeanServerBean property 'usePlatformMBeanServer' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?我检查了目录\standalone\deployments\myproject.war\WEB-INF\lib,我可以看到2个库:simplejmx-1.8simplejmx-1.9。我在 Eclipse 中做了Project cleanMaven clean。没有变化,lib 目录中仍然存在两个版本。
  • usePlatformMBeanServer@GirlyGirl 需要 1.9。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2013-11-05
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多