JMX コネクタのリクエスト タイムアウトを設定しようとしていますが、うまくいかないようです。
env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));
しかし、うまくいかなかったので、グーグルで理由を調べたところ、標準のJMXリモートAPIでは上記の環境変数がサポートされていないことがわかりました。
リクエストのタイムアウトを設定する他の方法はありますか?
デフォルトの JMX プロトコル (RMI) を使用する場合、クライアント側のタイムアウトに最適なオプションはグローバル RMI 接続タイムアウトです。もちろん、永久に開いている必要がある RMI 接続を使用する必要がない場合にのみ機能します。
タイムアウトのサンプル プロパティを次に示します (Oracle RMI ドキュメントから取得: http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html )。
-Dsun.rmi.transport.tcp.responseTimeout=60000
私はそれをテストしました、それは本当にうまくいきます。オラクルのドキュメントには、通信のクライアント側とサーバー側に役立つプロパティが他にもいくつかあります。
これらのコードを試して、JMX コネクタのタイムアウトを設定できます。
JMXConnector connectWithTimeout(JMXServiceURL url, long timeout, TimeUnit unit) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<JMXConnector> future = executor.submit(new Callable<JMXConnector>() {
public JMXConnector call() {
return JMXConnectorFactory.connect(url);
}
});
return future.get(timeout, unit);
}