CommunicationException [Root 异常是 ConnectException: Connection timed out]

Kar*_*ose 5 java runtime-error ldap communicationexception connectexception

我在尝试连接 Active Directory 时偶尔会遇到此异常。

javax.naming.CommunicationException: <ServerIP>:<PORT> 
  [Root exception is java.net.ConnectException: Connection timed out: connect]
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    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);
Run Code Online (Sandbox Code Playgroud)

在此行中获取连接超时异常ctx = new InitialDirContext(env);。它不会每次都发生,但经常发生。

请告诉我,如何摆脱这个问题?

Tam*_*viv 3

这种情况偶尔也会发生在我身上。因为这种情况只发生约 1% 的时间,所以我怀疑这是 Juned 的答案中列出的任何原因,因为我的设置没有任何变化。

对我来说,它的发生是相当随机的,并且无需我采取任何具体行动即可修复。这让我相信这里提供的答案是正确的:

这很可能是连接泄漏。连接超时可能由多种原因引起,但大多数情况每次都会导致连接超时。LDAP 服务器很可能有一个同时处理的最大连接数,超过这个数它就不会调用accept(),因此新的传入连接会保留在积压队列中,该队列已满,这可能会导致进一步的传入连接无法及时处理。出去。

@OP发生这种情况时,您可以在服务器上运行 netstat -anp 来检查上面的假设吗?您还可以在 LDAP 服务器上设置连接空闲超时吗?这将修复连接泄漏,但以暴力方式可能会破坏其他东西。