用的Acegi1.03 (老项目,版本比较老)+ open ldap 做的用户登陆,机构权限的获取。在上生产配置集群之后,发现部分服务器登陆时间超时,经查找,发现服务器线程数量特别高。
     请问熟悉这方面的专家,查找ldap这块的问题所在,是否设置的问题,如何优化。    如果想将ldap更换成ORACLE,能否有好的方案,将ldap中的数据导入数据中。。
  在线等啊!!~

解决方案 »

  1.   

    线程同步并发的时候注意优化就行了
    http://developer.51cto.com/art/201003/189174.htm
    文章有介绍
      

  2.   

    ldap 查询的效率是很高的即使你用了oracle  不一定解决问题你们有多大的并发访问量?
      

  3.   

      大概1000左右吧,现在是LDAP的线程堵塞,是否和连接池有关系呢。
      

  4.   

        现在查找到得是:如果ldap 如果不开放连接池的话,登陆不会堵塞,但是登陆效率很低,比较慢。但是设置连接池之后,过一段时间之后,就会开始堵塞。
        个人分析: 是否是由于在设置连接池之后,使用过的连接没有释放,导致连接池中没有可用链接(连接池连接数量达到最大限制),从而其他用户一直在等待空闲连接。
      

  5.   

    如下是错误信息:名称: http-0.0.0.0-15080-86
    状态:BLOCKED 在 com.sun.jndi.ldap.pool.Connections@9190929 上,拥有者: http-0.0.0.0-15080-66
    阻塞总数:25  等待总数: 51堆栈追踪: 
    com.sun.jndi.ldap.pool.Connections.get(Connections.java:122)
    com.sun.jndi.ldap.pool.Pool.getPooledConnection(Pool.java:129)
    com.sun.jndi.ldap.LdapPoolManager.getLdapClient(LdapPoolManager.java:310)
    com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1572)
    com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2596)
    com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:283)
    com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
    com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
    com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
    com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
    javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
    javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
    javax.naming.InitialContext.init(InitialContext.java:223)
    javax.naming.InitialContext.<init>(InitialContext.java:197)
    javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:82)
    org.acegisecurity.ldap.DefaultInitialDirContextFactory.connect(DefaultInitialDirContextFactory.java:176)
    org.acegisecurity.ldap.DefaultInitialDirContextFactory.newInitialDirContext(DefaultInitialDirContextFactory.java:257)
    org.acegisecurity.ldap.DefaultInitialDirContextFactory.newInitialDirContext(DefaultInitialDirContextFactory.java:237)
    org.acegisecurity.ldap.LdapTemplate.execute(LdapTemplate.java:123)
    org.acegisecurity.ldap.LdapTemplate.nameExists(LdapTemplate.java:135)
    org.acegisecurity.providers.ldap.authenticator.PasswordComparisonAuthenticator.authenticate(PasswordComparisonAuthenticator.java:79)
    org.acegisecurity.providers.ldap.LdapAuthenticationProvider.retrieveUser(LdapAuthenticationProvider.java:216)
    org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:115)
    org.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:188)
    org.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:45)
    org.acegisecurity.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:71)
    org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:199)
    org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
    org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
    org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
    org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:229)
    org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
    org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
    org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
    org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
    org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    java.lang.Thread.run(Thread.java:595)
      

  6.   

    ldap 的连接池没用过 不过根据你的描述很有这个可能
      

  7.   

    基于面向对象技术的通用LDAP目录访问连接池
    你百度这本书看看~~
      

  8.   

    http://download.oracle.com/javase/jndi/tutorial/ldap/connect/config.html这是官方的 连接池配置说明, 我已经配置过连接池的timeout 时间。 和连接的timeout时间了,但是没什么效果