首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何初始化JRockit MBean树

如何初始化JRockit MBean树
EN

Stack Overflow用户
提问于 2012-02-17 07:02:13
回答 2查看 1K关注 0票数 0

下面的代码只列出在platform MBean服务器中找到的所有MBean名称:

代码语言:javascript
复制
  public static void main(final String[] args) throws Exception {

    initJMX();

  }

  @SuppressWarnings("unchecked")
  private static void initJMX() throws IOException, MalformedURLException, AttributeNotFoundException,
      InstanceNotFoundException, MalformedObjectNameException, MBeanException, ReflectionException,
      NullPointerException {
    JMXConnector jmxc = null;
    final Map<String, String> map = new HashMap<String, String>();
    jmxc = JMXConnectorFactory.newJMXConnector(createConnectionURL("localhost", 7788), map);
    jmxc.connect();
    final MBeanServerConnection connection = jmxc.getMBeanServerConnection();
    final String[] domains = connection.getDomains();
    for (final String domain : domains) {
      final Set<ObjectName> mBeans = connection.queryNames(new ObjectName(domain + ":*"), null);
      for (final ObjectName name : mBeans) {
        System.out.println(name);
      }
    }
    jmxc.close();
  }

当我尝试使用具有以下参数的JRockit 1.5.0_4.0.1运行此代码时:

代码语言:javascript
复制
-Xmanagement:ssl=false,authenticate=false,autodiscovery=false,port=7788

它打印出以下列表:

代码语言:javascript
复制
[INFO ][mgmnt  ] Remote JMX connector started at address localhost:7788 
[INFO ][mgmnt  ] Local JMX connector started
com.oracle.jrockit:type=FlightRecorder
java.util.logging:type=Logging
JMImplementation:type=MBeanServerDelegate
java.lang:type=Compilation
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Young Collector
java.lang:type=MemoryManager,name=Class Manager
java.lang:type=MemoryPool,name=ClassBlock Memory
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Old Collector
java.lang:type=Runtime
java.lang:type=MemoryPool,name=Nursery
java.lang:type=ClassLoading
java.lang:type=Threading
java.lang:type=MemoryPool,name=Class Memory
java.lang:type=OperatingSystem
java.lang:type=Memory
java.lang:type=MemoryPool,name=Old Space

但是,如果我在调用initJMX方法之前放置了一个断点,并且在这个点上用JRMC连接到那个JVM,那么JRMC会显示更多的MBeans,而且在继续执行程序之后,它还会打印一个包含更多与JRockit相关的MBeans的不同列表:

代码语言:javascript
复制
[INFO ][mgmnt  ] Remote JMX connector started at address T500W7AAD:7788 
[INFO ][mgmnt  ] Local JMX connector started
com.oracle.jrockit:type=FlightRecorder
oracle.jrockit.management:type=PerfCounters
oracle.jrockit.management:type=Compilation
oracle.jrockit.management:type=Log
oracle.jrockit.management:type=Profiler
oracle.jrockit.management:type=MemLeak
oracle.jrockit.management:type=JRockitConsole
oracle.jrockit.management:type=GarbageCollector
oracle.jrockit.management:type=Runtime
oracle.jrockit.management:type=Threading
oracle.jrockit.management:type=DiagnosticCommand
oracle.jrockit.management:type=Memory
java.util.logging:type=Logging
JMImplementation:type=MBeanServerDelegate
java.lang:type=Compilation
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Young Collector
java.lang:type=MemoryManager,name=Class Manager
java.lang:type=MemoryPool,name=ClassBlock Memory
java.lang:type=GarbageCollector,name=Garbage collection optimized for throughput Old Collector
java.lang:type=Runtime
java.lang:type=MemoryPool,name=Nursery
java.lang:type=ClassLoading
java.lang:type=Threading
java.lang:type=MemoryPool,name=Class Memory
java.lang:type=OperatingSystem
java.lang:type=Memory
java.lang:type=MemoryPool,name=Old Space

有没有一种方法可以说JRockit可以在JVM启动时自动初始化这些bean,而不需要显式的JRMC连接?问题是,我试图编写一些重用其中一些MBeans的代码,但在与JRMC连接之前,它们是不可用的。

更新:这似乎是JRockit jdk1.5.0_4.0.1问题。同样的代码在JRockit jdk6.0_4.1.0上也能正常工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 10:39:58

这似乎是我使用的Windows版本的JRockit的一个问题:

代码语言:javascript
复制
java version "1.5.0_24"
Java(TM) Platform, Standard Edition for Business (build 1.5.0_24-b02)
Oracle JRockit(R) (build R28.0.1-21-133393-1.5.0_24-20100512-2131-windows-x86_64, compiled mode)

相同的代码在WindowsJDK1.6.0的最新JRockit上的工作方式与预期相同:

代码语言:javascript
复制
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Oracle JRockit(R) (build R28.2.2-7-148152-1.6.0_29-20111221-2104-windows-x86_64, compiled mode)

在相同的JRockit版本上,但是对于Linux:

代码语言:javascript
复制
java version "1.5.0_24"
Java(TM) Platform, Standard Edition for Business (build 1.5.0_24-b02)
Oracle JRockit(R) (build R28.1.0-123-138454-1.5.0_24-20101014-1350-linux-x86_64, compiled mode)
票数 1
EN

Stack Overflow用户

发布于 2012-02-17 08:26:14

尝试使用*:*的对象名称进行查询

代码语言:javascript
复制
final Set<ObjectName> mBeans = connection.queryNames(new ObjectName("*:*"),

可能JRMC在MBeanServer中找到的JRockit中有多个MBeanServers。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9324186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档