使用持久连接时连接太多

时间:2014-04-01 13:41:27

标签: php mysql pdo

我有一个小博客,每分钟有超过400名在线访问者。

由于需要很多连接请求,我在可能时使用持久连接重用它,这是我的连接类:

<?php
    class DatabaseConnection {

        var $currCon;

        public function connect() {
            require_once '/config.php';

            try {

                $this->currCon = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_DATABASE, DB_USER, DB_PASSWORD, array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", 
                    PDO::ATTR_PERSISTENT => true
                ));

            } catch (Exception $e) {
                header('HTTP/1.1 503 Service Temporarily Unavailable');
                header('Status: 503 Service Temporarily Unavailable');
                header('Retry-After: 300');
                die("Can't connect to MySQL database<br />: " . $e);
            }
        }

        public function disconnect() {
            // Unused for PERSISTENT connections
            // $this->currCon = null;
            // unset($this->currCon);
        }

        public function getDatabaseConnection() {
            return $this->currCon;
        }
    }
?>

问题是我收到很多错误,说 连接太多 ,这很有趣,因为我使用的是持久连接模型!

此外,我更改了MySQL服务配置并将max_connection值从150增加到500,但问题仍然存在!

如何避免此错误的任何想法!?

2 个答案:

答案 0 :(得分:1)

  1. 制作

    PDO::ATTR_PERSISTENT => FALSE
    

    这很可能就足够了。

  2. 还要确保仅调用DatabaseConnection :: connect() ONCE

答案 1 :(得分:0)

在这种类型的应用程序中,更好的方法是根本不使用持久连接。如果MySQL服务器在同一台机器上,那么持久连接的好处很小。

这里已经讨论过https://stackoverflow.com/a/5323928/1800369