Tôi có máy chủ ứng dụng JBoss đang sử dụng LDAP để xác thực. Gần đây chúng tôi đã nhận thấy rằng có rất nhiều yêu cầu chậm (> 15 giây).Yêu cầu LDAP treo trong 15 giây
tôi đã làm một số threaddumps của máy chủ và nhận thấy rằng nhiều chủ đề mà chờ đợi vào một khóa: [email protected]
java.lang.Object.wait(Native Method)
com.sun.jndi.ldap.Connection.readReply(Connection.java:418)
com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:340)
com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:192)
com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2637)
com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:283)
com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:134)
com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(ldapURLContextFactory.java:35)
javax.naming.spi.NamingManager.getURLObject(NamingManager.java:584)
Tất cả các yêu cầu Tôi đã thấy rằng đã chờ đợi ở trạng thái này đã sử dụng hơn 15 giây để hoàn thành. Chúng tôi đang giám sát máy chủ LDAP và tất cả các yêu cầu từ công cụ giám sát kết thúc trong vòng chưa đầy 200 ms. Điều này làm cho tôi nghĩ rằng đây là một vấn đề với mã com.sun.jndi.ldap. Dịch ngược lớp com.sun.jndi.ldap.Connection (jdk1.5.0_12) Tôi thấy điều này:
BerDecoder readReply(LdapRequest ldaprequest) throws IOException, NamingException
{
_L2:
BerDecoder berdecoder;
if((berdecoder = ldaprequest.getReplyBer()) != null)
break; /* Loop/switch isn't completed */
try
{
label0:
{
synchronized(this)
{
if(sock == null)
throw new ServiceUnavailableException((new StringBuilder()).append(host).append(":").append(port).append("; socket closed").toString());
}
synchronized(ldaprequest)
{
berdecoder = ldaprequest.getReplyBer();
if(berdecoder == null)
{
ldaprequest.wait(15000L);
break label0;
}
}
break; /* Loop/switch isn't completed */
}
}
...
Có vẻ như là một thời gian chờ hardcoded của 15000 mili giây.
Có ai có ý tưởng nào để sửa chữa/giải quyết sự cố không?
Tại sao berdecoder lại là null? Một suy nghĩ liên quan: thời gian chờ mặc định trên nhiều máy khách phân giải tên khi máy chủ DNS không khả dụng là 15 giây. – mas
Sự cố mạng? Bạn sẽ ngạc nhiên về mức độ thường xuyên của một switch sẽ thả các gói ngay cả trên một mạng LAN đơn giản – nos