我遇到了一个问题,我希望有人可以帮助我。
目前,当我们的脚本(Java和PHP)尝试连接到localhost mysql数据库时,我们不时会收到错误。
由于许多连接错误,主机'myhost'被阻止;使用'mysqladmin flush-hosts'解锁。
此问题似乎主要发生在凌晨。经过大量的搜索以找出为什么会出现这种情况后,我终于得出结论,这可能是因为我们的托管公司在这个时候运行他们的备份流程。我的理论是,在这个备份过程中(这也是我们最繁忙的时期),我们最终耗尽了所有连接,因此发生了这个错误。
我已经与我们的主机谈过改变这些备份发生的时间,但是他们已经声明这是不可能的,这只是备份开始确保它们在当天完成的时间(尽管我们已经通知他们的关键时期是在备份发生的确切时间。)
我连接到服务器的东西是:
我们通常可以在任何时间打开300到600个套接字连接,并且这些连接的平均活动大约是每秒1-3个请求。
我还在服务器上安装了monit和munin以及一些mysql插件,希望他们可以帮助自动解决这个问题,但是这些看不到解决问题。
我的问题是:
我们目前正在使用Apache运行 PHP版本5.2.6-1 + lenny9 服务器。
如果需要更多信息,请告知我们。感谢。
更新: 我在共享的虚拟主机上运行,我很确定我关闭了我的网站连接,因为我在我的数据库类中有这个代码
function __destruct() {
@mysql_close($this->link);
}
我很确定我没有通过我的PHP脚本使用持久连接,因为我连接到db @mysql_connect命令。
更新: 所以我将max_connections限制从100改为200,并在php.ini中将mysql.persistant变量从On更改为Off。现在两个晚上运行服务器已经完成,主要是与mySql数据库的连接。我在服务器上有一个1GB的RAM,但它似乎永远不会接近。另外看看我的munin日志,连接似乎永远不会达到200分,但我的日志文件中出现错误,如
答案 0 :(得分:1)
我们在使用MySQL作为后端的大型电子商务安装方面遇到了类似的问题。我建议你改变MySQL实例的“max_connections”设置,然后(如果需要)在启动MySQL之前使用“ulimit”改变文件描述符的数量(我们在/etc/init.d中使用“ulimit -n 32768”) / MySQL的)。
答案 1 :(得分:0)
有人建议我发布这个问题的答案,虽然我从未真正对它进行排序。
最后,我最终实现了一个Java连接池类,它使我能够共享连接,同时保持我想要的最大连接数的上限。还有人建议我增加RAM并增加最大连接数。我做了这两件事虽然他们只是这个问题的乐队。我们最终也搬迁了托管服务提供商,因为我们所处的并不是非常合作。
在这些次要的实施后,我没有注意到这个问题至少发生了8个月,这对我来说已经足够了。
随着时间的推移,其他建议也必须实现线程池设施,但是当前的需求不需要这种需求。