Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CommunicationException[根异常为ConnectException:连接超时]_Java_Ldap_Runtime Error_Communicationexception_Connectexception - Fatal编程技术网

Java CommunicationException[根异常为ConnectException:连接超时]

Java CommunicationException[根异常为ConnectException:连接超时],java,ldap,runtime-error,communicationexception,connectexception,Java,Ldap,Runtime Error,Communicationexception,Connectexception,我在尝试连接Active Directory时偶尔会遇到此异常 javax.naming.CommunicationException: <ServerIP>:<PORT> [Root exception is java.net.ConnectException: Connection timed out: connect] javax.naming.CommunicationException:: [根异常为java.net.ConnectException:连

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

javax.naming.CommunicationException: <ServerIP>:<PORT> 
  [Root exception is java.net.ConnectException: Connection timed out: connect]
javax.naming.CommunicationException::
[根异常为java.net.ConnectException:连接超时:连接]
这是我的密码:

    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);
DirContext ctx=null;
Properties env=新属性();
环境保护(Context.SECURITY_PRINCIPAL,);
环境保护(Context.SECURITY_凭证,);
env.put(Context.PROVIDER_URL,“ldap://:”;
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
ctx=新的初始目录上下文(env);
获取此行中的连接超时异常
ctx=new InitialDirContext(env)。
它不是每次都发生,但经常发生


请告诉我,如何解决这个问题?

我偶尔也会遇到这种情况。由于这种情况只发生了约1%,我怀疑这是朱纳德回答中列出的任何原因,因为我的环境没有任何变化

对我来说,它是随机发生的,并且是固定的,我没有采取任何具体行动。这使我相信所提供的答案是正确的:

很可能是连接泄漏。连接超时可能由许多因素引起,但大多数因素每次都会导致连接超时。很可能LDAP服务器同时处理的连接数已达到最大值,超过该值时,它将不会调用accept(),因此新的传入连接将保留在积压队列中,这将导致更多传入连接超时

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


有同样的间歇性问题,尽管配置指向域名(不是IP)


通过使用NSLOOKUP,发现列出了一个不存在的DC,这导致了间歇性的连接问题。

当我用ScheduledExecutorService替换计时器来启动Ldap服务器时,我也开始注意到这一点。这个问题原来是一个竞赛条件。我将Ldap服务器的启动时间从0延迟更改为5秒延迟,这似乎解决了Ldap服务器的java.net.ConnectException问题

此处存在种族条件:

final ScheduledExecutorService ses=Executors.newSingleThreadScheduledExecutor(); ses.scheduleWithFixedDelay(ldapServer,0,5,时间单位为秒)

此处解决了竞赛条件:

final ScheduledExecutorService ses=Executors.newSingleThreadScheduledExecutor();
ses.scheduleWithFixedDelay(ldapServer,5,5,时间单位秒)

切换到LDAPS后,我收到了相同的错误,我现在使用端口636,我发现我连接的域上的一个域控制器在端口636上被阻塞


[Root exception is java.net.ConnectException:Connection timed out:connect]I

这是我为克服上述随机问题而采取的一种变通方法:捕获CommunicationException,然后重试至少3次。希望这篇文章对@FutureBay这样的人有用(这篇文章似乎没有为这个问题提供答案。请编辑你的答案并加以改进,或者只是作为对这个问题的评论发表)。