Php 持久连接和最大用户连接

Php 持久连接和最大用户连接,php,mysql,pdo,Php,Mysql,Pdo,我需要一些信息尽快你可以帮助我解决一个问题。我用PHP设计了一个应用程序,它查询mysql数据库并以json的形式返回响应。我已经在pylot和ApacheJMeter中对json响应进行了负载测试,结果很好。我使用PHP的PDO使用持久连接。然而,即使连接是持久的,我仍然得到拒绝连接到数据库与以下错误 [23-Apr-2013 12:11:53] SQLSTATE[42000] [1203] User user already has more than 'max_user_connectio

我需要一些信息尽快你可以帮助我解决一个问题。我用PHP设计了一个应用程序,它查询mysql数据库并以json的形式返回响应。我已经在pylot和ApacheJMeter中对json响应进行了负载测试,结果很好。我使用PHP的PDO使用持久连接。然而,即使连接是持久的,我仍然得到拒绝连接到数据库与以下错误

[23-Apr-2013 12:11:53] SQLSTATE[42000] [1203] User user already has more than 'max_user_connections' active connections
我原以为持久连接可以缓解这种情况,但看起来它们被忽略了。如有任何建议,将不胜感激

$DBH = null;

$host = "localhost";
$db_name = "my_db";
$user_name = "user";
$pass_word = "password";

try {
  # MySQL with PDO_MYSQL
  $DBH = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8", $user_name, $pass_word, array(PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e) {
    error_log( $e->getMessage(), 0 );
}

如果您的目的是减少连接数,那么使用pconnect将是错误的想法,因为它实际上会增加连接数

因此,要解决这个问题,您必须在mysql服务器配置中增加max_user_连接的数量,以匹配apache线程/nginx工作线程的数量

如果您不能增加max_user_连接的数量,那么就不应该使用持久连接


仅此而已。

根据我多年的个人经验,PHP脚本中的持久连接并不能缓解*max\u user\u connection*错误消息。相反,它们往往是原因

无论是什么原因,连接池都没有像广告中所说的那样工作。PHP倾向于打开新的连接,即使有空闲的连接。结果,一个流量相对较低的应用程序最终耗尽了最大流量(而90%的连接什么也不做)


如果该功能存在,则必须有一个正常工作的场景。也许问题在于它只能在某些平台或SAPI上正常工作。不管怎样,我建议你禁用持久连接并监视你的应用。

你的apache连接比max\u user\u连接多吗?(高负载或诸如此类的事情?)放弃持久性将解决问题