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への接続を再開しようとしています。なぜこれが起こっているのか、それを防ぐ方法は?間違ったことをしていますか?
おかげ
実際にJMX接続を生かしておくのが問題だったようです。 ClientCommunicatorAdminには毎分接続をチェックするデーモンスレッド(Checher)があります。 – Gotxi