0

我需要一些信息尽快帮助我解决问题。我在 PHP 中设计了一个应用程序,它查询 mysql 数据库并以 json 形式返回响应。我已经在 pylot 和 apache jmeter 中对 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 );
}
4

2 回答 2

0

根据我多年来的个人经验,PHP 脚本中的持久连接并不能减轻 *max_user_connection* 错误消息。相反,它们往往是原因

不管是什么原因,连接池都没有像宣传的那样工作。即使有空闲连接,PHP 也倾向于打开新连接。结果,流量相对较低的应用程序最终会耗尽最大值(并且 90% 的连接什么都不做)。

如果该功能存在,则必须存在其正常工作的场景。也许问题在于它只能在某些平台或 SAPI 上正常工作。无论如何,我建议您禁用持久连接并监控您的应用程序。

于 2013-04-23T11:44:21.767 回答
0

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

因此,要解决问题,您必须增加 mysql 服务器配置中的 max_user_connections 数量以匹配 apache 线程/nginx 工作人员的数量。

如果你不能增加 max_user_connections 的数量,那么你不应该使用持久连接。

就这样。

于 2013-04-23T11:37:54.510 回答