没有可用的数据库连接   这个问题如何解决 !!!   程序部署在别的公司的服务器上,,运行一段时间后就出现这个问题,重启服务又可以了,,,但程序运行一段时间又出现了!!急急!!!求牛人解决下

解决方案 »

  1.   

    基本上说明有链接泄漏,存在程序Bug,没有释放连接。排查方式两种:
    1、生产环境上,出现无可用连接后,在数据库端检查所有会话最后执行的SQL语句是啥,基本可以定位到模块级别;
    2、测试环境上,数据库可用连接和应用的连接池设置很小,比如10个,然后做稳定性测试,检查问题出在哪里。推荐第一种方式,但需要提前先用工具连上数据库,否则等连接耗尽,你也没法连上数据库去排查问题了。
      

  2.   

    正解,顶个
    如果用的是hibernate会自动帮你关闭
    如果是自己手动连接每次用完必须关闭,肯定是某个地方忘记关闭了
      

  3.   

      。。  报错 的 地方 不确定 。。   我报错 后 我 如何 知道 是 哪里的 连接 没 释放      错误: 没有可用的连接数
    大牛--文杰:(328897842)  16:44:21
      debug  不用说了。 
    大牛--文杰:(328897842)  16:44:49
    java.sql.SQLException: 没有可用的数据库连接
    14:22:39,961 ERROR [STDERR]  at com.egosystems.apputil.pool.ConnectionFactory.getFreeConnection(ConnectionFactory.java:342)
    14:22:39,961 ERROR [STDERR]  at com.egosystems.apputil.pool.DbPool.getFreeConnection(DbPool.java:52)
    大牛--文杰:(328897842)  16:45:32
      拿不到 连接数    可能是 哪里的 代码 没释放 连接 但是 我看了下 基本 的 finally  都  有 关闭 连接  。。
    大牛--文杰:(328897842)  16:45:53
      所以  我  找不到 这个  错误 是哪里 报的 后台 也是  时有时无的  出现    求大神!!!!!!!!!!
      

  4.   

    你还真够笨的,楼主都说了“没有可用的数据库连接”啊,就好比你的jdbc配置不对一个吊样
      

  5.   

    他会报这个错,证明你确实有没有关闭的资源,我不清楚你是用什么做的dao层,但既然你说finall都关闭了,我给你的建议:会不会是你try里多次会话用的是不同的session,
      

  6.   

    解决:
    1:如果你用的jdbc直接连,建议修改成数据库联接池。
    2:如果你用的数据库联接池,那么你可以放大数据库默认的连接数,只有基数大了你才可以修改你的配置文件中的连接数。最后还有建议,最好还要检查一下代码是不是有获取连接没有释放或是获取连接的业务过多而执行较慢,释放的速度赶不上被获取的速度,所以就会造成运行一段时间后不够用。
      

  7.   


    import oracle.jdbc.pool.OracleDataSource;try {
    OracleDataSource dataSource = new OracleDataSource();
    dataSource.setURL("jdbc:oracle:thin:@localhost:1521:orcl");
    dataSource.setUser("system");
    dataSource.setPassword("sa");
    for (int i = 0; i < 5000; i++) {
    System.out.println(dataSource.getConnection());
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    试试这个,连续取出5000个Connection,不用关闭,也不会出现你说的那种情况。
      

  8.   

    [引用 10 楼 scottxzj 的回复:]
    1.没释放连接池,一直被占用   2.连接池设置的小了,真的是连接池数目满了
    顶 一下