1

昨天一切正常。我将 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);
}

所以每个请求都不应该有一个新的连接。但我从不关闭连接(不知道我应该在哪里关闭它)。

  1. 是为每个用户建立新连接还是为多个用户使用相同的连接?
  2. 如果连接可用,我如何签入代码并向用户显示相应的消息而不是显示恶意页面?
  3. 我的代码是否有问题,使用了太多连接?
  4. 如果成功连接,我如何记录?

这是我的连接功能:

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 服务器 5.0.77 ->手动

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
  1. 我认为我一天内没有达到这个数量的查询,所以这是共享主机吗?
  2. 对于连接过多的问题,我能做些什么?

目前一切正常,但如果系统上线并且更多用户将使用它,我不希望出现这个问题。

4

0 回答 0