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);。它不会每次都发生,但经常发生。
请告诉我,如何摆脱这个问题?
这种情况偶尔也会发生在我身上。因为这种情况只发生约 1% 的时间,所以我怀疑这是 Juned 的答案中列出的任何原因,因为我的设置没有任何变化。
对我来说,它的发生是相当随机的,并且无需我采取任何具体行动即可修复。这让我相信这里提供的答案是正确的:
这很可能是连接泄漏。连接超时可能由多种原因引起,但大多数情况每次都会导致连接超时。LDAP 服务器很可能有一个同时处理的最大连接数,超过这个数它就不会调用accept(),因此新的传入连接会保留在积压队列中,该队列已满,这可能会导致进一步的传入连接无法及时处理。出去。
@OP发生这种情况时,您可以在服务器上运行 netstat -anp 来检查上面的假设吗?您还可以在 LDAP 服务器上设置连接空闲超时吗?这将修复连接泄漏,但以暴力方式可能会破坏其他东西。