Проблема с удаленным подключением JMX и уведомлениями

Я пытаюсь следовать одному примеру из документации Java API (http://download.oracle.com/javase/1.5.0/docs/api/java/lang/management/MemoryPoolMXBean.html#Notification), относящемуся к 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. Есть идеи, почему это может происходить или как это предотвратить? Я что-то делаю не так?

Спасибо


person Gotxi    schedule 02.02.2011    source источник
comment
Похоже, на самом деле это была проблема сохранения соединения JMX. В ClientCommunicatorAdmin есть поток демона (Checher), который каждую минуту проверяет соединение.   -  person Gotxi    schedule 03.02.2011


Ответы (1)


Возможно, вы можете добавить переменную в среду jmx, например: m.put ("jmx.remote.x.client.connection.check.period", 0L);

Но то, с чем я столкнулся, мало отличается от этого. вы можете увидеть: http://chainhou.iteye.com/blog/1906688.

person Alex.Luo    schedule 10.02.2014