2011-02-02 26 views
3

Java APIのドキュメント(http://download.oracle.com/javase/1.5.0/docs/api/java/lang/management/)の1つの例に従おうとしています。 MemoryPoolMXBean.html#Notification)。メモリプールBeanおよび通知のUsageThresholdプロパティに関連しています。私の意図は、プールが閾値を克服するたびに何かをすることです。これはサンプルコードです:リモートJMX接続と通知の問題

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への接続を再開しようとしています。なぜこれが起こっているのか、それを防ぐ方法は?間違ったことをしていますか?

おかげ

+2

実際にJMX接続を生かしておくのが問題だったようです。 ClientCommunicatorAdminには毎分接続をチェックするデーモンスレッド(Checher)があります。 – Gotxi

答えて

0

あなたはこのように、JMX的環境に変数を追加することができかもしれませ: m.put( "jmx.remote.x.client.connection.check.period"、0L);

しかし、私が遭遇したことはこれとは少し異なります。 あなたは見ることができます:http://chainhou.iteye.com/blog/1906688