如何为JMX连接器设置请求超时时间

15
我试图为JMX连接器设置请求超时时间,但似乎不起作用。
env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));

但是因为它没有起作用,我通过谷歌搜索了解原因,并发现在标准JMX远程API中不支持上述环境变量。

是否有其他方法来设置请求超时时间?


你能否在创建时将超时时间添加到JMX连接中,例如:JMXConnector jmxc = connectWithTimeout(jmxServiceURL, 30, TimeUnit.SECONDS); - Sean F
@SeanF,是的,我也看过那篇博客,但我的要求是设置请求超时而不是连接超时。我在想JMXMP连接器是否具备这种能力。 - sasankad
哦,好的,抱歉我无法在这方面帮助你。 - Sean F
2个回答

9
如果您使用默认的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文档中,还有一些其他对客户端和服务器端通信非常有用的属性。


如果我们谈论像junit测试这样的东西,您也可以在启动jmx之前以编程方式执行此操作,例如在@BeforeClass方法中: System.setProperty("sun.rmi.transport.tcp.responseTimeout", "60000") - fuzzyBSc

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);
          }

这是我采用的解决方案。但是我忘记更新我的答案了。所以我会接受这个答案。 - sasankad
11
好的,但这实际上不会导致挂起的连接超时。它只是导致线程停止等待连接并假定连接失败。在高流量环境中,以这种方式留下的连接将很快消耗资源。 - Mihai Danila

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接