小弟为单位开发了一个平台,主要功能是对初始单据进行多层审核,每层审核都有不同的用户来进行;
  我对tomcat没什么了解,jsp也才是刚刚起步,平台倒是可以运行了,但正是运行1个月左右,发现tomcat不运行了,重启tomcat后就好了,之后变成两周就得起一次tomcat,有时单单起tomcat还没用,必须重启服务器,然后必须一周就得起一次,最近变成4-5天就得重启tomcat或服务器,在状态上它总是在运行的,可是就是不连接数据库,我用的是tomcat是5.5的,服务器系统是windows2003,数据库为Oracle9i;
  我之前对tomcat没有进行任何配置,有人说是因为数据量越来越大,导致tomcat的进程出现了问题,请指点下!!
  在线等

解决方案 »

  1.   

    在硬件允许的情况下
    提高tomcat的内存大小,和连接池,可用连接数
      

  2.   


    连接池配置了吗,配置的地方有个 size参数,放大点。 内存吗,设置启动的那个 -xmx 511M xmi 256M 那一串呀。
      

  3.   

    我研究下 从来没碰过tamcat 拿来就先用了 呵呵
      

  4.   

    如果页面可以访问。那就是连接池的问题。另外对tomcat也要调优。
      

  5.   

    链接数据库用的是bean,您的意思是不是在每次使用过后都要close一次呢
      

  6.   

    是不是没释放连接啊
    finally{
    ConDB.closeRs(rs);
    ConDB.closeStm(stm);
    ConDB.closeCon(con);
    }再就是tomcat加大内存  看看
      

  7.   

    都说是程序问题,最可能出现问题的地方是哪呢?
    链接数据库的javabean吗?
      

  8.   

    以我的经验猜测就是有些连接没有close.
    数据库连接没有释放.
    同意10楼的看法.
      

  9.   

    以下是我用的数据库的javabean 是从书上直接down下来的。在编译过程中没有什么问题,请各位看看。。package sb;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class sql_data {
    String  sDBDriver = "oracle.jdbc.driver.OracleDriver";
    String  url="jdbc:oracle:thin:@127.0.0.1:1521:ora9";    
    //String  url="jdbc:oracle:thin:@10.211.236.5:1521:ora9";

    String  user="batman";    
    String  password="baggio";  
    Connection  conn=  null; 
    Statement stmt = null;
    ResultSet rs = null;
    public sql_data()
    {
     try {
    Class.forName(sDBDriver);
     }
     catch(java.lang.ClassNotFoundException e){
        System.err.println("sql_data(): " + e.getMessage());
     }
    }
    public void executeInsert(String sql) 
    {
     try {
      conn = DriverManager.getConnection(url,user,password);
      stmt = conn.createStatement();
      stmt.executeUpdate(sql);
      stmt.close();
      conn.close();
     }
     catch(SQLException ex) {
      System.err.println("sql_data.executeUpdate:"+ex.getMessage());
     }
    }
    public ResultSet executeQuery(String sql)
    {
    try {
    conn = DriverManager.getConnection(url,user,password);
    stmt=conn.createStatement();
        rs = stmt.executeQuery(sql);
    }
    catch(SQLException ex){
     System.err.println("sql_data.executeQuery:"+ex.getMessage());
    }
    return rs;
    }
    public void executeUpdate(String sql)
    {
     try {
      conn = DriverManager.getConnection(url,user,password);
         stmt = conn.createStatement();
      stmt.executeUpdate(sql);
      stmt.close();
      conn.close();
     } 
     catch(SQLException ex) { 
       System.err.println("aq.executeQuery: " + ex.getMessage());
     }
    }
    public void executeDelete(String sql) 
    {
    try {
     conn = DriverManager.getConnection(url,user,password);
     stmt = conn.createStatement();
     stmt.executeUpdate(sql);
     stmt.close();
     conn.close();

    catch(SQLException ex){
     System.err.println("sql_data.executeDelete:"+ex.getMessage());
    }
    }
    public void closeStmt(){
        try{
          stmt.close();
         }
        catch(SQLException e){
          e.printStackTrace();
         }
      } public void closeConn(){
       try{
         conn.close();
       }
       catch(SQLException e){
         e.printStackTrace();
       }
    }
    }
      

  10.   

    sql_data 用的时候每次都new sql_data()出来的吗,如果sql_data单例的话存在线程同步问题。
    下面这段代码。public ResultSet executeQuery(String sql)
        {
        try    {
            conn = DriverManager.getConnection(url,user,password);
            stmt=conn.createStatement();
            rs = stmt.executeQuery(sql);
        }
        catch(SQLException ex){
         System.err.println("sql_data.executeQuery:"+ex.getMessage());
        }
        return rs;
        }connection怎么关闭??
      

  11.   

    好像在这个bean中 没有关闭过
      

  12.   

    改一下连接池,可用连接数.在tomcat里面的conf目录里的 server.xml
      

  13.   

    好久没有看到lz这样访问db的代码了,
    算是古董了吧,呵呵db访问一定要用连接池的lz去参考一下tomcat下配置吧
    给lz个参考。http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.htmlgood luck
      

  14.   

    改用tomcat提供的连接池吧!我前两天发的一个帖子就是换连接池的。
    配置tomcat6的context.xml在Context加入以下内容, <Resource  name="jdbc/mengshan"  
                auth="Container"  
            type="javax.sql.DataSource"  
                maxActive="20"  
                maxIdel="10"  
                maxWait="1000"  
                username="root"  
                password=""  
        driverClassName="com.mysql.jdbc.Driver"   
        url="jdbc:mysql://127.0.0.1:3306/test"  
            >  
    </Resource> 
    简单测试<%@ page contentType="text/html; charset=gb2312" %>
    <%@ page import="javax.naming.Context" %> 
    <%@ page import="javax.sql.DataSource"%> 
    <%@ page import="javax.naming.InitialContext"%> 
    <%@ page import="java.sql.*"%> 
     <% 
     DataSource ds = null; 
     try{ 
     Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); //从Context中lookup数据源
     ds = (DataSource)envCtx.lookup("jdbc/mengshan"); if(ds!=null) {
      out.println("已经获得DataSource!");
      out.println("<br>");Connection conn = ds.getConnection();
      Statement stmt=conn.createStatement();ResultSet rst=stmt.executeQuery("select * from usertable");
      out.println("以下是从数据库中读取出来的数据");
      while(rst.next()){
      out.println("bookName:"+rst.getString(1));
      out.println("<br>"); }}else out.println("连接失败!"); }
      catch(Exception ne){out.println(ne);} 
      %>
     
      

  15.   

    即使用连接池也要在程序里调用close,将连接置为空闲状态,这样才能重用,否则也会从dataSorce里取不到连接
    用连接池是解决数据库性能问题的,不能解决连接泄漏的问题。虽然有的连接池有自动回收空闲连接的功能,我们还是要手工显示的去调用连接的关闭方法,不能依赖连接池的回收功能,因为你设置的一分钟回收的话,用户操作多的话,一分钟之内连接就有可能会满
      

  16.   

    你的程序有问题,有些地方没有释放数据库连接 最好用try{}catch(Exception e){}finally{}结构
      

  17.   

    换个大的服务器啊  weblogic什么的
      

  18.   


    不是在bean里面关的 给你个例子
    public ArrayList findAllFligth(){
    ArrayList fligthList =new ArrayList();
    Connection con=ConDB.getConnection();
    String sql="select * from T_flight a,T_corporation b where a.corporation_Id=b.corporation_Id";
    System.out.println(sql);
    Statement stm=null;
    ResultSet rs=null;
    try {
    stm=con.createStatement();
    rs=stm.executeQuery(sql);
    while(rs.next()){
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    ConDB.closeRs(rs);
    ConDB.closeStm(stm);
    ConDB.closeCon(con);
    }
    return fligthList;
    }
      

  19.   

    大數據量的還是不要用tomcat吧,這個是用來學習玩的,用WebSphere
      

  20.   

    tomcat在跑,就是不连数据库?
    你的数据库连接已经满了。
    可能的原因:
    1。程序中部分代码没有关闭连接。
    2。数据库的允许最大连接数设的过小,导致一部分连接请求在排队。实在访问量太大了,因为你的是直连用完关的方式,所以排队咯。
    3。你的代码有问题,你应该在finally里面关连接,否则前面出错抛异常了,你的close执行不到连接也不会关。
    4。某些地方数据库死锁。就能想到这些了。顶下