【问题标题】:PHP - Persistant connections, too many connectionsPHP - 持久连接,连接太多
【发布时间】:2015-12-01 16:12:03
【问题描述】:

我有一个网站,始终有大约 700 到 1000 名用户在线。最近我体验到我的网站变得非常缓慢。似乎有某种瓶颈。

我当前的设置是我有一个index.php 页面,它处理我的所有子页面。设计是这样的:

include_once($settings['incpath'].'_ify_database.php');

    //Define the extra page levels. 
    $i = (isset($_GET['i']) ? inputFilter($_GET['i']) : 'h');
    $xp = (isset($_GET['p']) ? inputFilter($_GET['p']) : null);
    $xpp = (isset($_GET['n']) ? inputFilter($_GET['n']) : null);    

    switch($i){
        case 'h': // Home
            include($settings['themespath'].$config['active_theme'].'/indexheader.php');
            include($settings['pagepath'].'home.php');
            include($settings['themespath'].$config['active_theme'].'/indexfooter.php');
        break;
     }

这就是我连接数据库的方式 (_ify_database.php):

try {
    $dsn = "mysql:host=" . $database['host'] . ";dbname=" . $database['db'];
    $dbh = new PDO($dsn, $database['user'], $database['pass'], array(PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));     
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); // <== add this line
    }
catch(PDOException $e){
    echo $e->getMessage();
}

如您所见,我已将持久连接设置为false

PDO::ATTR_PERSISTENT => false

如果我将它启用到TRUE,我会看到加载时间明显增加,但一段时间后我收到Too Many Connections 错误。

我做错了什么?如果网站上有 500 人,速度很快。如果有 900-1000 则加载时间加倍。

【问题讨论】:

  • 您应该监控 MySQL 和验证这些连接是否正在实际使用,或者只是空闲。在第一种情况下,可能值得增加限制。
  • @ÁlvaroGonzález 这些访问者中的许多人只是被重定向到我的网站,并且在那里停留了 0 到 2 分钟。如何防止这些连接处于空闲状态?
  • 不确定您所说的“被重定向”是什么意思...我没有再次尝试使用最近的 PHP 版本,但过去我遇到过 MySQL 驱动程序无法重用的糟糕经历连接和不必要地打开新连接 - show processlist 查询会将大多数连接显示为“睡眠”。
  • 您没有指定如何为 PHP 提供服务 - 通过 Apache 和 mod_php 或者您使用的是 php-fpm - 这对您的问题至关重要,因为我们可以确定实际有多少连接以及是否SQL是瓶颈。在您 100% 确定要查找的位置之前,不要解决任何问题。另外,所有东西都位于一台物理机器上吗?

标签: php sql pdo


【解决方案1】:

限制来自php的最大持久连接数,或者增加mysql中的限制..试试

ini_set('mysql.max_persistent','500');
ini_set('mysqli.max_persistent','500');

并在 mysql 文档中找到了这个,似乎相关:https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2017-05-28
    • 2014-04-28
    • 2011-04-21
    相关资源
    最近更新 更多