6

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);。毎回ではありませんが、かなり頻繁に発生します。

この問題を取り除く方法を教えてください。

4

4 に答える 4

4

これは私にも時々起こります。そして、それは約1%の確率でしか発生しないため、私の設定では何も変わらないため、Junedの回答に記載されている理由のいずれかであるとは思えません.

私にとっては、それは非常にランダムに発生し、特に何もしなくても修正されます。これは、ここで提供された答えが正しいと私に信じさせます:

接続漏れの可能性が高いです。接続タイムアウトは多くの原因で発生する可能性がありますが、それらのほとんどは毎回発生します。LDAP サーバーには、同時に処理できる接続の最大数があり、それを超えて accept() を呼び出さない可能性が非常に高いため、新しい着信接続がバックログ キューに残り、それがいっぱいになり、さらに着信接続が時間切れになる可能性があります。アウト。

@OPこれが発生したときにサーバーでnetstat -anpを実行して、上記の仮説を確認できますか? LDAP サーバーで接続アイドル タイムアウトも設定できますか? それは接続リークを修正しますが、他のものを壊す可能性のある力ずくの方法で.

于 2016-08-17T14:38:48.613 に答える