我需要一些信息,以帮助我解决问题。我在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 );
}
答案 0 :(得分:0)
如果你的意图是减少连接数,那么使用pconnect是错误的想法,因为它实际上会增加数量。
所以,要解决这个问题,你必须增加mysql server配置中的max_user_connections数量,以匹配apache线程/ nginx worker的数量。
如果无法增加max_user_connections的数量,则不应使用持久连接。
就是这样。
答案 1 :(得分:0)
根据我多年来的个人经验,PHP脚本中的持久连接不会缓解* max_user_connection *错误消息。相反,它们通常是原因。
无论是什么原因,连接池都没有像宣传的那样工作。 PHP倾向于打开新连接,即使在那里闲置的连接也是如此。因此,流量相对较低的应用最终会耗尽最大值(并且90%的连接无效)。
如果该功能存在,则必须存在可正常运行的方案。也许问题是它只能在某些平台或SAPI上正常运行。无论如何,我建议您禁用持久连接并监控您的应用。