我用了proxool链接方式,我的页面同一时刻会有很多交互量,连接数比较多,我设置了最大连接数50,但是通过后台查看连接数状态发现,发现如下:
Connections: 45 (active), 5 (available), 50 (max)
Served: 66536
Refused: 2012 (这个数据要服务重启后才会清掉,严重导致了我的网站访问很慢,而且linux下mysql的进程也变得很多,导致服务器都变得很慢)
请问这个问题怎么解决?急!
也看过相关的贴,说可能是连接用了没有关闭掉,但是经过查证,都关闭了,访问量少时,一切都很正常的:
Connections: 3 (active), 4 (available), 50 (max)
Served: 66536
Refused: 0
*********************************************************************
我的部分代码如下:
/**
* 初始化配置文件
*/
static synchronized public DBConnectionPoolManager getInstance()
{
if (null == dbcpm)
dbcpm = new DBConnectionPoolManager();
return dbcpm;
}
/**
*创建连接
*/
public Connection getConnection() {
try {
con = DriverManager.getConnection( "proxool.xml-db ");
} catch (Exception e) {
System.out.println( "Connection failed ! " + e.getMessage());
}
con;
}
/**
*关闭连接
*/
public void close() {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (prestmt != null) {
prestmt.close();
}
if (con != null) {
con.close();
System.out.println( "关闭连接.. ");
}
} catch (Exception e) {
}
}
具体方法调用大概流程如下:
com.gltb.db.DBConnect dbConnect= new com.gltb.db.DBConnect();
dbConnect.createConnection();
dbConnect.executeQuery();
dbConnect.close();
(部分代码省略!)
------解决方案--------------------
很明显,有5个连接未关闭(5 (available) ).
查查代码,肯定有个地方没有写 conn.close