我也怀疑连接池有问题,虽然我现在没有一一检查,但我确信多数都是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;}
你们还不如直接用tomcat的连接池
是啊,现在可能会做这种改变,这是很老的代码。现在数据库重启了,一切又恢复正常,我做的改变是将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,这个数会不会太大了?
你所说的服务器服务器是怎么架的...架在另一台服务器上吗?!!!!
你们用什么服务器..TOMCAT是经常出问题!所以我经常启动!可是我这公司网站访问量基本上没什么呀!
常用的静态基本不变的数据缓存起来。
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;}
SEVERE: All threads (300) are currently busy, waiting. Increase maxThreads (300) or check the servlet status
我想这是所有连接都死在了数据库上吧,也许我应该改变连接池的intMaxConns = 200,这个数会不会太大了?
另外,Tomcat在出现某些Exception后会定在哪儿,具体什么异常我没有时间去具体测试,但是SQLException很多时候会让Tomcat定(控制台没有错误或者反映,页面不能访问)在那儿,但是只要处理好异常和资源的释放就不会有问题了,我的开发服务器现在就没有出现过了,你自己检查一下你数据库连接池和其他的访问代码,优化修改一下就没有问题了
说明一下,我用Tomcat是4.1的版本,Tomcat5拿来玩了一下,但是没有用过哈
如果要支撑大量的Internet访问的话,建议将apache和Tomcat继承,Tomcat作为web容器的效率确实不怎么样