我正在使用带有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进程。
max_connections
升至1500吗?mysql.max_persistent
设置为750(由于数据库服务器与应用程序服务器不同,我们因为性能原因使用PDO和持久连接?)提前致谢!
答案 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在其他环境中更有用。