15

我正在尝试为 JMX 连接器设置请求超时,但似乎它不起作用。

env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));

但由于它不起作用,我搜索了一下原因,发现在标准 JMX 远程 api 中不支持上述环境变量。

有没有其他方法可以设置请求超时?

4

2 回答 2

8

如果您使用默认的 JMX 协议 - RMI - 那么客户端超时的最佳选项是全局 RMI 连接超时。当然,只有当您不需要使用必须永远打开的 RMI 连接时,它才会起作用。

这是超时的示例属性(取自 Oracle RMI 文档:http ://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html ):

-Dsun.rmi.transport.tcp.responseTimeout=60000

我已经测试过了,它确实有效。在 oracle 文档中,对于通信的客户端和服务器端,还有一些其他有用的属性。

于 2013-12-18T11:45:18.260 回答
3

您可以尝试这些代码来设置 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);
          }
于 2013-09-12T08:59:23.623 回答