连接池都一样,实现一样的功能。恐怕不止是连接问题,语言翻译可能照顾不到Java的特点。很有可能资源没有释放 。

解决方案 »

  1.   

    1 jdbc一定要用连接池,而且要适当配置(初始连接数定30,增长数定5)
    2 检查程序里面的db释放是否做得好,我以前遇到过,就是因为没有close掉,浪费很多资源,甚至于Oracle都报出"open too many cursor"!
    3 翻页慢有很多原因,80%是db返回数据太大了。需要优化sql;优化返回结果集的处理。
    4 程序架构是否有问题?有些东西是否可以使用缓存?比如一些常用的数据,不用每次到db去找,而应该缓存起来。
      

  2.   


    用纯JSP实现的话速度肯定受限制,主要JSP在页面上操作结果集速度会打折扣。
      

  3.   

    你们用的是什么数据库
    我也是做JSP的,模式是JSP+Oracle,使用连接池
    遇到的情况也是一样,服务器隔一定时间就是out of memory或IO Exception(连接池不能连数据库),做分页功能时速度很慢,但只要不是分页且数据量不大时,速度还是挺快的后来对数据库作了优化后,查询速度就快多了,IO Exception就很少见了,但Tomcat仍不是很稳定,隔几天就需要重启一次但在我自己机子上用mysql数据库做测试,一天访问上万次都没有问题
      

  4.   

    抛开代码的优化,对于Tomcat的设置:
    1.加大tomcat连接数
    2.禁止列目录下的文件
    3.加大tomcat可以使用的内存http://www.ee2ee.com/tech_art/1/36.html
      

  5.   

    To tzj0911() : 我们用的是SQL Server, 你是如何做数据库优化的??
     现在是在jsp程序中直接连接数据库, 每次连接后只写了rs.close(),stmt.close(), 没有写conn.close(). 是不是一定要写conn.close()?
    缓存如何便用?
      

  6.   

    恐怕不止是连接问题,语言翻译可能照顾不到Java的特点。很有可能资源没有释放 。
      public void disconnect() {
        try {
          if(stmt!=null){
          stmt.close();
          stmt = null;
          conn.close();
          conn = null;
          }
        }
        catch (Exception ex) {
        ex.printStackTrace();
        }
      }
      

  7.   

    "没有用到连接池/bean/servlet"?
    不怪tomcat
    1.可能上面说的,程序习惯问题
    2.硬翻译后还要优化理顺吧
      

  8.   

    把的所有JSP文件预编译一把
    你的等待是因为第一次引起的。
      

  9.   

    我现在总结一下:
    1:在jsp文件中增加连接池,然后每个文件jsp文件结束后,把连接(conn)关掉。
    2: 优化SQL数据库,解决翻页慢。
    3:增加缓存,这如何实现??
    还有其它办法吗?
    我上次已经研究过, 用Apache+Tomcat整合来提高效率。
      

  10.   

    分页涉及到总记录数的问题
    使用
    rs.last();
    rs.getrow();
    来得到总记录数实在是让人不能忍受的慢
    建议使用select count(*) from t where....
    来得到总记录数,然后再做一次同样的select来选出记录另外可以插入计时代码看看到底一次查询中最慢的地方是哪一步
      

  11.   

    rs.last();
    rs.getrow();
    有的驱动将从头但尾轮循整个结果集,这显然不可取select count(*) from t where....是正确的..
    还有如果使用了O/R mapping,则应该使用如hb,jdo等
    支持的count(XXX)查询方法,他将调用底层的count函数
    而不是把整个记录集取出来在取size
    ^_^慎用数据库sql语句的分页,大多数都是假分页....
      

  12.   

    从应用上找原因不是tomcat的错.
      

  13.   

    Tomcat也有一定的原因,他必竟不是商用服务器,但是如果连一两天都支持不了,还是找程序的原因吧
      

  14.   

    tomcat本身是没有什么好优化的,只是你们公司那个软件太垃圾不重新设计开发的话给你一个websphere也玩不爽。
      

  15.   

    如果不是要求跨平台,首选用数据源ODBC,然后再考虑用连接池,至于JDBC实在没办法的时候再用吧。另外就是有优化查询,这个到网上查询一下吧,再者就是注意用完的资源一定要释放。
      

  16.   

    用Apache+Tomcat整合来提高效率。
      

  17.   

    现在是在jsp程序中直接连接数据库, 每次连接后只写了rs.close(),stmt.close(), 没有写conn.close(). 是不是一定要写conn.close()?
    缓存如何便用?
    1.设计数据库的时候一定要考虑数据库的效率,尽量避免多表查询,适当的设置索引.数据库没设计好那会很麻烦的,我们公司就一套系统,当数据量很大时,速度就会很慢,就是因为数据库设计得一点都不合理.
    2.每次操作完数据库一定要释放相应的资源,当然连接也一定要释放,不然会消耗大量数据库的资源.
    3.下面这段代码是有问题的:
      public void disconnect() {
        try {
          if(stmt!=null){
          stmt.close();//如果这里产生了异常,那么会造成以后的conn无法释放
          stmt = null;
          conn.close();
          conn = null;
          }
        }
        catch (Exception ex) {
        ex.printStackTrace();
        }
      }
    代码这样写好些:
    try
    {
       ....//操作数据库
       stmt.close();
       stmt=null;
       conn.close();
       conn=null;
       ....
    }
    catch(Exception e)
    {
    //
    }
    finally
    {
        try
        {
           if(stmt!=null)
           {
               stmt.close();
               stmt=null;
           }
        }
        catch(Exception e)
        {
        }
        try
        {
           if(conn!=null)
           {
               conn.close();
               conn=null;
           }
        }
        catch(Exception e)
        {
        }
    }