不知道你们上层应用是用连接池去访问数据库还是什么
我们公司的WEB也出来过这种情况
但是是连接池访问数据库
现在修改了连接池代码后就不会出现你所说的情况了

解决方案 »

  1.   

    兄:
       你所说的服务器服务器是怎么架的...架在另一台服务器上吗?!!!!
       你们用什么服务器..TOMCAT是经常出问题!所以我经常启动!可是我这公司网站访问量基本上没什么呀!
      

  2.   

    数据库和tomcat在不同的机器上,现在我们发现数据库那台机器连接不上了(用工具,而不是通过tomcat)。
      

  3.   

    数据库连接没有关闭,resultset,statement,connection都是要关闭的,一定要用try .. catch .. finally结构,如果你用连接池,记得connection要归还。
    常用的静态基本不变的数据缓存起来。
      

  4.   

    我也怀疑连接池有问题,虽然我现在没有一一检查,但我确信多数都是try .. catch .. finally结构,但奇怪的是,在换环境之前,这些都是好用的,我们连接池管理是通过这样一个类:
    package com.chinabig.dbsql;import java.sql.*;public class DBConnectionManager {  private DBConnectionManager() throws Exception {
        bitMgr = new ConnectionPoolManager(intIdleForFree);
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
      }  public static synchronized DBConnectionManager getInstance() throws Exception {
        if (instance == null)
          instance = new DBConnectionManager();
        return instance;
      }  public void freeConnection(Connection connection) {
        try {
          connection.close();
          return;
        }
        catch (Exception _ex) {
          return;
        }
      }  public Connection getConnection(String s, String s1, String s2, String s3) throws
          Exception {
        try {
          bitMgr.getPool(s);
        }
        catch (SQLException _ex) {
          bitMgr.addAlias(s, "oracle.jdbc.driver.OracleDriver", s1, s2, s3,
                          intMaxConns, intIdleForFree, intIdleForCheckout,
                          intMaxUses);
        }
        return DriverManager.getConnection("jdbc:bitmechanic:pool:" + s, null, null);
      }  private static DBConnectionManager instance;
      private static ConnectionPoolManager bitMgr = null;
    //    public static int intMaxConns = 80;
    //    public static int intMinConns = 20;
      public static int intMaxConns = 200;
      public static int intMinConns = 20;
      public static int intIdleForFree = 180;
      public static int intIdleForCheckout = 60000;
      public static int intMaxUses = 100;}
      

  5.   

    你们还不如直接用tomcat的连接池
      

  6.   

    是啊,现在可能会做这种改变,这是很老的代码。现在数据库重启了,一切又恢复正常,我做的改变是将jdk从1.5换成了1.4.2_05,另外我注意到catalina.out里有这样的警告:
    SEVERE: All threads (300) are currently busy, waiting. Increase maxThreads (300) or check the servlet status
    我想这是所有连接都死在了数据库上吧,也许我应该改变连接池的intMaxConns = 200,这个数会不会太大了?
      

  7.   

    呵呵,这个看来真的是jdk版本太高了,今天运行了一天情况良好,这里要解释一下的是oracle的driver说的是支持jdk1.3 1.4没有说支持1.5,我想可能是这个原因,如果明天情况依然良好的话。谢谢大家,如果明天没问题就给参与分吧。
      

  8.   

    Oracle的JDBC驱动在1。4下是没有问题的,我一直用;1。5就不清楚了;
    另外,Tomcat在出现某些Exception后会定在哪儿,具体什么异常我没有时间去具体测试,但是SQLException很多时候会让Tomcat定(控制台没有错误或者反映,页面不能访问)在那儿,但是只要处理好异常和资源的释放就不会有问题了,我的开发服务器现在就没有出现过了,你自己检查一下你数据库连接池和其他的访问代码,优化修改一下就没有问题了
    说明一下,我用Tomcat是4.1的版本,Tomcat5拿来玩了一下,但是没有用过哈
    如果要支撑大量的Internet访问的话,建议将apache和Tomcat继承,Tomcat作为web容器的效率确实不怎么样