大家好,我是用jdbc连接sql2000的数据库,并用tomcat做连接池,现发现sqlservr.exe和tomcat.exe会不断增大.具体是每天只有几人人登录这个用jsp做的网站,但是一个月下来sqlservr.exe增大了100M,本来在30M,现在变成了100M了,tomcat也变成50M了.这样下去,如果登录的用户到1000个的话,那不是要隔一段时间重启,不知是什么原因.我写的程序大多像下面这样写的:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*,java.sql.*,java.net.*" %>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
 <% 
   Context ctx=null;
   Connection conn=null;
   Statement statement=null;
   ResultSet rs=null;
   String sql="";
   try
   {
    ctx=new InitialContext();
    if(ctx==null)
       throw new Exception("没有匹配的环境");
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/sql2000");
    if(ds==null)
       throw new Exception("没有匹配数据库");
     
    conn=ds.getConnection();
   
    sql="select * from users";
    statement=conn.createStatement();
    rs=statement.executeQuery(sql);
    if (rs.next())
    {
    //做一些东西
    %><%=rs.getString("name")%>
    <%
    }
     else
     {
      //做一些
     
     }
    rs.close();
    rs=null;
    statement.close();
    statement=null;
  
  %> 
   
   
<% //释放数据库连结
 if (rs!=null)
   {rs.close();
    rs=null;
   }
 if(statement!=null)
   {statement.close();
    statement=null;
   }
 if(conn!=null)
  {conn.close();
   conn=null;
  }
 if(ctx!=null)
  {
   ctx.close();
   ctx=null;
  }
  }catch (Exception e)
  {
   out.println(e.getMessage());
   }
finally
   {
   
    if (rs != null) {
      try { rs.close(); } catch (SQLException e) { ; }
      rs = null;
    }
    if (statement!= null) {
      try { statement.close(); } catch (SQLException e) { ; }
      statement = null;
    }
    if (conn != null) {
      try { conn.close(); } catch (SQLException e) {; }
      conn = null;
    }
    if (ctx != null) {
      try { ctx.close(); } catch (Exception  e) {; }
      ctx = null;
    }        
   }
    %> 
    
    
     
     

解决方案 »

  1.   

    SQL Server 使用内存的增长是正常的,通常是由于自动的缓存造成的。SQL Server 的默认设置是最多使用 60% 左右的物理内存。Tomcat 达到 50M 也没什么,几乎所有的JAVA技术应用服务器都会和内存过不去。
      

  2.   

    这台服务器是dell的,现内存配置是512M.那现在运行在480M,我感觉很不安全,就是物理内存很快会被消耗掉.我想问一下,如果这种情况是正常的,如果需要同时有3000个人在线的话,那配置内存需要多少,1G差不多了?还有这个是否跟sql2000或tomcat有关,如服务器换用orlace,WEB服务器换用weblogic这种情况会不会改善.
      

  3.   

    SQL server就是吃内存的。这跟JSP是没有关系的。
    即使你有2G的内存也会被慢慢的吃光。。呵呵~~
    不要害怕。