【问题标题】:Problem with remote JMX connection and Notifications远程 JMX 连接和通知问题
【发布时间】:2011-06-20 03:02:29
【问题描述】:

我正在尝试遵循 Java API 文档 (http://download.oracle.com/javase/1.5.0/docs/api/java/lang/management/MemoryPoolMXBean.html#Notification) 中的一个示例到内存池 Bean 和通知的 UsageThreshold 属性。我的意图是每次池超过阈值时做一些事情。这是示例代码:

MemoryPoolMXBean remoteOldGenMemoryPool =
    ManagementFactory.newPlatformMXBeanProxy(
        jmxServer,
        "java.lang:type=MemoryPool,name=PS Old Gen",
        MemoryPoolMXBean.class);


class MyListener implements javax.management.NotificationListener {
    public void handleNotification(Notification notification, Object handback)  {
      String notifType = notification.getType();
      if (notifType.equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) {
        // Do Something
        println "Threshold passed";
      }
    }
  }

// Register MyListener with MemoryMXBean
MemoryMXBean remoteMemory =
      ManagementFactory.newPlatformMXBeanProxy(
          jmxServer,
          ManagementFactory.MEMORY_MXBEAN_NAME,
          MemoryMXBean.class);

NotificationEmitter emitter = remoteMemory as NotificationEmitter;
MyListener listener = new MyListener();
emitter.addNotificationListener(listener, null, null);

remoteOldGenMemoryPool.setUsageThreshold 500000000;

当我执行代码并连接到我的 JVM 时,我可以看到以下内容:

Threshold passed
02-Feb-2011 16:30:00 ClientCommunicatorAdmin restart
WARNING: Failed to restart: java.io.IOException: Failed to get a RMI stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
    java.net.SocketException: Connection reset]
02-Feb-2011 16:30:03 RMIConnector RMIClientCommunicatorAdmin-doStop
WARNING: Failed to call the method close():java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
    java.net.SocketException: Connection reset
02-Feb-2011 16:30:03 ClientCommunicatorAdmin Checker-run
WARNING: Failed to check connection: java.net.SocketException: Connection reset
02-Feb-2011 16:30:03 ClientCommunicatorAdmin Checker-run
WARNING: stopping

由于某种原因(我还不明白),代码正在尝试重新启动与 JVM 的连接。任何想法为什么会发生这种情况或如何防止它?我是不是做错了什么?

谢谢

【问题讨论】:

  • 看来这实际上是保持 JMX 连接处于活动状态的问题。 ClientCommunicatorAdmin 中有一个守护线程 (Checher),每分钟检查一次连接。

标签: java groovy notifications jmx mbeans


【解决方案1】:

也许你可以在 jmx 环境中添加一个变量,像这样: m.put("jmx.remote.x.client.connection.check.period", 0L);

但是,我遇到的情况与此略有不同。 你可以看到:http://chainhou.iteye.com/blog/1906688

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多