当机时日志为:
java.lang.OutOfMemoryError: Java heap space
org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.OutOfMemoryError: Java heap space
org.apache.catalina.connector.CoyoteAdapter service
严重: An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: Java heap space
org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.OutOfMemoryError
at com.microsoft.util.UtilPagedTempBuffer.compressBlockList(Unknown Source)
at com.microsoft.util.UtilPagedTempBuffer.getBlock(Unknown Source)
at com.microsoft.util.UtilPagedTempBuffer.write(Unknown Source)
at com.microsoft.util.UtilPagedTempBuffer.write(Unknown Source)
at com.microsoft.util.UtilByteArrayDataProvider.receive(Unknown Source)
at com.microsoft.util.UtilByteOrderedDataReader.receive(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.submitRequest(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSCursorRequest.openCursor(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.execute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQuery(Unknown Source)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:188)
at DBManager.DBManager.getDB_returnArrayListSelect(DBManager.java:74)
at tools.IPConversion.getClientAddress(IPConversion.java:17)
at com.yourcompany.struts.action.IsWhichWebAction.execute(IsWhichWebAction.java:57)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:425)
at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:452)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1285)
at java.lang.Thread.run(Unknown Source)
我用了dbcp连接池,数据库(SQL Server2000)驱动为微软的,现成周期性连不上数据库,当机.问题:
   1. dbcp 连接池咋样啊?
   2. 看日志信息好像是内存溢出,可以设置JVM 虚拟内存,但是治标不治本,这样只能加长当机周期,怎么解决啊?
   3. 为什么过一段时间(大约为1个礼拜),数据库就连接不上了啊?
   4. 连接池配置:
      <data-sources >
   <data-source key="data_key" type="org.apache.commons.dbcp.BasicDataSource">
      <set-property property="password" value="sa" />
      <set-property property="minCount" value="30" />
      <set-property property="maxCount" value="1000" />
      <set-property property="username" value="sa" />
      <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
      <set-property property="description" value="data_key" />
      <set-property property="url" value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=databasename;" />
      <set-property property="readOnly" value="true" />
      <set-property property="autoCommit" value="true" />
      <set-property property="maxWait" value="10000" />
</data-source>
网站访问量比较大,连接池这样设置,合理吗?目前只能等挂了重启服务器来解决..郁闷...小弟菜鸟,请各位大哥指点迷津啊!谢谢.....急!

解决方案 »

  1.   

    <set-property property="minCount" value="30" />
          <set-property property="maxCount" value="1000" />
    应该不用1000的。
      

  2.   

    操作数据库方法是: 每次需要操作库时,就取出一个连接,本次操作完后,马上 con.close()
      

  3.   

    数据库 连接代码:
    private Connection getDB_Connection(DataSource ds)
    {
    Connection con = null;
    try {
    con = ds.getConnection();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return con;
    }数据库释放代码:
    public void getDB_closeConnection(ResultSet rs,Statement st,Connection conn)
    {
    try 
    {
    if(rs!=null)
    rs.close();
    if(st!=null)
    st.close();
    if(conn!=null)
    conn.close();
    }
        catch (Exception ex) 
        {
         System.out.println ("\n * system_log * : 数据库关闭失败!");
         ex.printStackTrace();
        }
        finally
        {
        
        }
    }
    每次操作数据库时,比如查询: 连接->查询->关闭
    这有问题吗?
      

  4.   

    赶紧把驱动程序换了吧,微软的JDBC驱动程序很垃圾,问题多多,换jtds,性能要好很多