Php从MySQL获得太多连接错误

时间:2010-05-24 08:55:11

标签: php mysql mysql-error-1040

我正在使用带有2个应用服务器和1个数据库服务器的MySQL和PHP。 随着用户数量的增加(现在大约1000),我收到以下错误:

SQLSTATE[08004] [1040] Too many connections

max_connections中的参数1000设置为my.cnf,而mysql.max_persistent中的-1设置为php.ini

由于MaxClients apache参数等于750且我们有2个应用程序服务器,因此一次最多运行1500个apache进程。

  • 我应该按照here指示max_connections升至1500吗?
  • 或者我应该将mysql.max_persistent设置为750(由于数据库服务器与应用程序服务器不同,我们因为性能原因使用PDO和持久连接?)
  • 或者我应该尝试别的吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

我认为你的连接速度不够快,并且它们会一直堆叠,直到达到默认时间。我有同样的问题,在wait_timeout我解决了问题。

您可以尝试在my.cnf中设置

set-variable = max_connections=1000 // max connection
set-variable = max_user_connections=100 // max user connection per hour
wait_timeout = 60 // wait timeout for connection in seconds

将在60秒后终止任何现有连接

答案 1 :(得分:1)

我认为你应该检查PHP代码,如果你可以摆脱持久连接。

持久连接的问题是,即使在脚本退出之后,php实例也会保持打开状态,直到数据被发送到客户端并且php实例被释放给下一个客户。

持久连接的另一个问题是某些PHP代码可能会使套接字的设置与启动时不同,具有不同的区域设置或临时表。

如果你可以重写每个连接的代码,那么只有一个或几个mysql_connects和数据库句柄被传递到代码的不同部分或保存在GLOBAL中,丢失持久连接的性能影响可以忽略不计。

当然,加倍max_connections几乎没有什么害处。无论如何,它对PHP来说并不是很有用,因为PHP / Apache子项无论如何都会经常退出并关闭句柄。 max_connections在其他环境中更有用。