<set-property property="maxCount" value="10"/>
应该是最多能建立的连接数目,访问两大的话10个应该不够的,设成50或100试试.

解决方案 »

  1.   

    注意你的程序中在某次数据库访问结束后,一定要关闭连接,节约资源,maxIdle也可以改大些,改成10个或20个,不用每次访问数据库都要重新建立连接。
      

  2.   

    另外我想说明一下,该服务的访问量不大。
    能不能从log文件中看出是否访问后没有关闭连接呢。
      

  3.   

    private UserDAO getUserDAO(HttpServletRequest request) throws Exception
    {
    DataSource ds = getDataSource(request, Constants.DATABASE_KEY); if (ds!=null) {
    Connection conn = ds.getConnection();
    if (conn!=null) {
    UserDAO userDAO = new UserDAO(conn);
    return userDAO;
    }
    }
    return null;
    }
    private void setupUserList(HttpServletRequest request) throws Exception {
    HttpSession session = request.getSession();
    DataSource ds = getDataSource(request, Constants.DATABASE_KEY); if (ds==null) {
    log.info("Could not find DataSource");
    }
    else {
    Connection conn = ds.getConnection();
    if (conn!=null) {
    ArrayList userList;
    UserDAO userInfo = new UserDAO(conn);
    String menuRight =(String)session.getAttribute("menu140");
    int menu_140_dom = Integer.parseInt(menuRight);
    if(menu_140_dom == 4 || menu_140_dom == 6){
    userList = userInfo.loadUserList();
    log.info("UserList size=" + userList.size());
    }
    else /*if(menu_140_dom == 0)*/{
     AuthToken userinfo = (AuthToken)session.getAttribute(Constants.AUTH_KEY);
     int myselfid= userinfo.getId();
    userList = userInfo.loadUserList(myselfid);
    log.info("UserList size=" + userList.size()); } if (userList!=null)
    session.setAttribute(Constants.USERLIST_KEY, userList);
    conn.close();
    }
    }
    }
      

  4.   

    maxIdle是最大的空闲连接数,是一些与数据库的连接始终是保持着的,当你的应用程序要访问数据库的时候就可以优先使用这些连接,以提高速度,如果这些连接数不够的话才会重新建立一些连接。maxCount和maxIdle都是根据实际的情况来设置的,主要就是同时在线的访问量了。log文件没用它看过,你的程序中如果每次conn建立使用后,最后都有conn.close();就应该没问题了。
      

  5.   

    另外我想问一下,就是,那个maxCount是连接的计算机数量,还是访问的网页数量,比如我一台机子,打开多个,是占起中的一个呢,还是多个
      

  6.   

    maxCount是应用程序连接数据库的最大数目,连接数超出的话有些请求可能就无法完成了,不指访问的网页数量,用户发出的请求如果要对数据库做操作的话才会占用一个数据库连接。
      

  7.   

    我提交的服务3个的时候还很好,但是第四个还有问题,所以我以为是maxIdle的问题,所以我把它的值加到4,然后我也不服务重新启动了,但是到第四个服务的时候,还是不行,其中jboss报错如下:
       FATAL[XNetworkDAO]  SQL EXCEPTION: org apache.commons.dbcp. SQLNestdException Cannot get a connection . pool exhausted ,cause: Timeout waiting for idle object.
      

  8.   

    应该跟maxIdle没关系吧,这些连接不够用的话会建立新的连接,主要是maxCount,你设的是多少,够不够用,改大下试试
      

  9.   

    我已经把maxcount改到100了,maxidle改到10了,都不行,还是在3个后就死了!而且目前使用该东西几乎就那么两三台机子
      

  10.   

    应该是你的连接没关闭,最后导致连接池耗尽,后面的请求无法执行了,你的getUserDAO类里就没关闭conn,每定义一个conn在使用完后都要关闭,不然它就一直占用着一个连接。检查下你的页面及JAVA程序中看有没没有关闭的,修改后重启服务(),我配的是TOMCAT的连接池,里面最大连接数是maxActive。你可以到开发语言板块的jsp,javabean...里面咨询下,那里熟悉这个的比较多的。
      

  11.   

    问题解决了,我把
    <set-property property="removeAbandonedTimeout" value="60"/>改成
    <set-property property="removeAbandonedTimeout" value="25"/>
    就可以了,但我不是很明白是为什么呢!感觉程序里面还可能有问题(因为心里没底)