我已经在stack overflow上阅读了关于这个主题的所有问题/答案,但不幸的是没有一个解决我的问题。
在过去的几天里,mysql错误“连接太多”不断出现在网站日志上,它为每个客户端挂起了整个网站。事实上,它会挂起服务器上的所有网站。
以下是我的问题/评论:
有大约50个不同的客户机数据库,除了2个是所有客户机通用的数据库之外
对于所有连接,pconnect已经=false
在文件“php.ini”中,变量“allowpersistent”处于启用状态。即使我写pconnect=false,这会使mysql连接永久吗(我无法更改“allowpersistent”变量,必须询问托管公司)
有3个文件加载数据库,一个加载客户机的数据库,另外两个加载所有客户机的公共数据库,它们在每个模型的构造方法上都被调用,但是ci应该在完成之后关闭mysql连接,忽略任何已经加载的“load->database”
“db->close”显然什么也不做,因为这个->db->数据库在我关闭它之后保留它的值:p
当我写这篇文章时,连接的线程数达到了1000个,网站也关闭了:(
mysql配置最大连接数=1000,是否可以进一步增加?我看不到空闲内存的变化,那么会发生什么呢?
我应该换成pdo吗?我用的是dbdriver“mysqli”
我是否应该要求托管公司降低mysql变量'wait\u timeout',以便快速关闭db连接?
我应该更新codeigniter吗?我有3.1.4版,现在是3.1.9版
非常感谢你的帮助!
2条答案
按热度按时间niwlg2el1#
我也遇到同样的问题。使用此查询检查mysql中当前活动连接数时:
在睡眠模式下有很多连接。四处寻找后,我发现:
创建数据库连接时,也会同时在数据库服务器上创建会话,但如果该连接和会话未正确关闭,则在等待时间结束后,查询将进入休眠模式。
为了解决这个问题,我以@pedro的身份,在mysql中运行以下命令,将wait\ timeout改为180:
使用此方法,无需重新启动mysql服务即可生效。
您可以在此处阅读更多内容:https://www.znetlive.com/blog/what-is-sleep-query-in-mysql-database/
7lrncoxx2#
在我们的例子中,解决方案是将mysql变量“wait\u timeout”从8小时(默认值是wtf!)到180秒。如果需要的话,还可以再降低一些。这必须由托管公司完成,因为我们没有根访问我们的服务器。
我在问题中提到的所有其他解决方案都不起作用,比如“pconnect=false”和“db->close”。
“线程连接”现在总是在100或200以下,而不是这个修复之前的近1000。
我的团队与这个问题搏斗了两天,网上有很多人在寻求解决方案,但没有任何有效的答案。
干杯:)