昨天一切正常。我向客户发送了PHP应用程序的链接。几个小时后,我查看了该页面,并在源代码中看到了以下错误:
SQLSTATE[00000] [1040] Too many connections
我也记录错误,只看到上面的消息。
在PHP应用程序中有许多请求,但只有一个特定的表(没有连接...)。我还使用自己的类进行数据库连接。其中我有一个如果之前没有设置过的句柄。
if($this->_handle == null){
$this->Connect();
}
try{
// make query
}
catch(PDOException $e){
echo "An error occured: {$e->getMessage()}";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
因此,每个请求都不应该有新的连接。但是我从不关闭连接(不知道应该在哪里关闭它)。
这是我的连接功能:
public function Connect(){
try{
$this->_handle = new PDO("mysql:host={$this->dbhost};dbname={$this->dbname}", $this->dbuser, $this->dbpasswd);
$this->_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
echo "An error occured: {$e->getMessage()}";
file_put_contents('PDOErrors.txt', $e->getMessage() . chr(10) . chr(13), FILE_APPEND);
}
}
比我在此错误后尝试搜索互联网。这就是我发现的:
MySQL Server 5.0.77 - > Manual
PHP 5.2.9,锁定了phpinfo()
show variables like 'max_connections';
给了我1000个!
如果我使用SHOW STATUS;
,我会看到以下内容:
Aborted_clients 16
Aborted_connects 15248
Connections 1694699
Max_used_connections 1001
Queries 266398903
Table_locks_immediate 36136077
Table_locks_waited 40387
Threads_connected 2
Threads_created 1694698
Threads_running 2
Uptime 2143256
目前一切正常,但如果系统上线并且有更多用户使用它,我不想要这个问题。