我需要一些信息尽快帮我解决一个问题。我用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 );
}发布于 2013-04-23 19:37:55
如果您的目的是减少连接数量,那么使用pconnect将是错误的想法,因为它实际上会增加连接数量。
因此,为了解决这个问题,您必须在mysql服务器配置中增加max_user_connections的数量,以匹配Apache线程/nginx工作线程的数量。
如果你不能增加max_user_connections的数量,那么你就不应该使用持久连接。
就这样。
发布于 2013-04-23 19:44:22
根据我多年来的个人经验,PHP脚本中的持久连接并不能缓解*max_user_connection*错误消息。相反,他们往往是原因。
不管是什么原因,连接池并没有像广告中所说的那样工作。PHP往往会打开新的连接,即使有空闲的连接也是如此。因此,一个相对较低的流量应用程序最终会耗尽最大流量( 90%的连接什么都不做)。
如果该功能存在,则必须存在其正常工作的场景。也许问题是它只在某些平台或SAPI上正确工作。无论如何,我建议你禁用持久连接,并监控你的应用程序。
https://stackoverflow.com/questions/16168310
复制相似问题