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”类型的未处理异常