CommunicationException [根异常是ConnectException:连接超时]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CommunicationException [根异常是ConnectException:连接超时]相关的知识,希望对你有一定的参考价值。
我偶尔会遇到此异常,同时尝试连接Active Directory。
javax.naming.CommunicationException: <ServerIP>:<PORT>
[Root exception is java.net.ConnectException: Connection timed out: connect]
这是我的代码:
DirContext ctx = null;
Properties env = new Properties();
env.put(Context.SECURITY_PRINCIPAL, <Bind_USER>);
env.put(Context.SECURITY_CREDENTIALS, <Bind_USER_PWD>);
env.put(Context.PROVIDER_URL, "ldap://<ServerIP>:<PORT>");
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ctx = new InitialDirContext(env);
获取此行ctx = new InitialDirContext(env);
中的连接超时异常。它并非每次都会发生,而是经常发生。
请告诉我,如何摆脱这个问题?
偶尔也会发生这种情况。因为它只发生了大约1%的时间,我怀疑这是Juned答案中列出的任何原因,因为我的设置没有任何变化。
对我而言,它是相当随机的,并且在我没有任何具体行动的情况下得到修复。这让我相信here提供的答案是正确的:
它很可能是连接泄漏。连接超时可能由许多事情引起,但大多数事情都会导致它每次都出现。很可能LDAP服务器具有它将同时处理的最大连接数,除此之外它不会调用accept(),因此新的传入连接将保留在积压队列中,这会填满,这可能导致进一步的传入连接到时间出。
@OP你可以在服务器上运行netstat -anp来检查上面的假设吗?您还可以在LDAP服务器上设置连接空闲超时吗?这样可以解决连接泄漏问题,但是会以蛮力的方式破坏其他事情。
有相同的间歇性问题,虽然配置指向域名(不是IP)。
通过使用NSLOOKUP,发现列出了一个不存在的DC,导致间歇性连接问题。
我开始注意到这一点,当我将Timer与ScheduledExecutorService一起使用时,用于启动我的Ldap服务器。问题原来是竞争条件。我将Ldap服务器的启动时间从0延迟更改为5秒延迟,这似乎解决了我的Ldap服务器的java.net.ConnectException。
这里存在竞争条件:
final ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); ses.scheduleWithFixedDelay(ldapServer,0,5,TimeUnit.SECONDS);
比赛条件在这里解决:
final ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); ses.scheduleWithFixedDelay(ldapServer,5,5,TimeUnit.SECONDS);
转移到LDAPS后我得到了同样的错误我现在使用的是端口636,我发现我连接的域上的一个域控制器在端口636上被阻止。
[根异常是java.net.ConnectException:连接超时:连接]我
以上是关于CommunicationException [根异常是ConnectException:连接超时]的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 WCF 传递位图时出现“System.ServiceModel.CommunicationException”
GlassFish 3.1 中客户端的 ctx.lookup() 时发生 CommunicationException
套接字连接被中止 - CommunicationException
在将我的登录页面连接到 MySql 时,我收到 CommunicationException 错误
.com.mysql.jdbc.exception.jbbc4.communicationexception..通信链路故障
mscorlib.dll 中出现“System.ServiceModel.CommunicationException”类型的未处理异常