Java JMX连接超时

Java JMX连接超时,java,multithreading,threadpool,jmx,Java,Multithreading,Threadpool,Jmx,我的线程池已满,因为大多数线程正在等待套接字连接。如何为jmx connect添加超时 java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) - locked <0x05671ad0> (a java.net.

我的线程池已满,因为大多数线程正在等待套接字连接。如何为jmx connect添加超时

java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    - locked <0x05671ad0> (a java.net.SocksSocketImpl)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:548)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:351)
    at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:71)
    at javax.rmi.ssl.SslRMIClientSocketFactory.createSocket(SslRMIClientSocketFactory.java:105)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97)
    at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1871)
    at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1841)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
java.lang.Thread.State:可运行
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
-锁定(一个java.net.socksocketimpl)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
位于java.net.socksocketimpl.connect(socksocketimpl.java:366)
位于java.net.Socket.connect(Socket.java:519)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:548)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.(SSLSocketImpl.java:351)
位于com.sun.net.ssl.internal.ssl.sslsocketfactorympl.createSocket(sslsocketfactorympl.java:71)
位于javax.rmi.ssl.SslRMIClientSocketFactory.createSocket(SslRMIClientSocketFactory.java:105)
位于sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
位于sun.rmi.transport.tcp.tcpcchannel.createConnection(tcpcchannel.java:198)
位于sun.rmi.transport.tcp.tcpcchannel.newConnection(tcpcchannel.java:184)
位于sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
位于sun.rmi.registry.RegistryImpl\u Stub.lookup(未知源)
在com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97)上
位于com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
在javax.naming.InitialContext.lookup(InitialContext.java:392)中
位于javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1871)
位于javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1841)
位于javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)

只需添加以下系统属性-“-Dsun.rmi.transport.tcp.responseTimeout=60000”

这是一个棘手的问题。这取决于您所处的环境导致哪个部件超时

最有可能的情况是,您在TCP级别遇到连接超时,这可能是由于防火墙问题,也可能是由于套接字仍处于打开状态的死机应用程序

JVM的总连接超时设置为-1,因此默认情况下是无限的。你好,线程泄漏

sun.net.client.defaultConnectTimeout (default: -1)
您可以在此处找到Java oracle网络参数的文档:

遗憾的是,jmx/rmi特定文档没有该级别的连接超时设置。但他们在读取超时上有一系列其他控件:

您可以在使用netcat和将应用程序指向localhost端口等简单工具进行开发的同时对此进行测试:

# creat socket on port 3333
netcat -l 3333
# now point your app on the socket
# and you should be able to reproduce

这将刺激端口上的死机应用程序或防火墙块

这不是重复的吗。不同之处可能在于连接与响应超时,但在其他方面是相同的。请添加代码的相关部分,以便我可以研究解决方案。@bartosz.r不同之处,请参见下面的答案。可以为rmi/jmx配置读取超时。TCP的连接超时不是,很遗憾,您需要在java的网络配置中进行更深入的操作。为什么这个答案被否决了?看到这个了吗