我最近将我的laravel应用程序从5.1升级到5.4。我的服务器现在是PHP 7和Maria db 10.1.22。现在我得到一个非常奇怪的错误。有时候,我会尝试刷新浏览器,PHPMyAdmin会显示#1040 - Too many connections
。其他时候我会点击我的应用程序上的新链接,然后会得到同样的错误。我在互联网上做了一些研究并执行了以下命令:
show variables like 'max_connections`
上面的命令给出了100.然后我增加到500。
但现在我仍然得到错误。这对我来说很奇怪,因为我在另一台服务器上安装了oracle mysql 5.6并且max_connections是151,并且超过一年半我没有遇到过这个错误。
当我运行命令show processlist
时,我得到下面的结果,并且这个数字不断增加。这是正常的吗?
Mariadb可能存在什么问题,我该如何解决呢?
答案 0 :(得分:5)
我不确定你们是否找到了解决方案,但我也遇到了同样的问题并找到了解决方案。当我们将laravel应用程序从5.2 - 5.4升级时,我们错过了一些重要的东西。 php artisan队列:工作也已升级。
在laravel 5.2中,当我们执行queue:work时。它只是一次处理一个作业,但是在laravel 5.4队列中:work为队列创建连接并保持连接。因此,如果您有队列:在您的cron中工作以便每分钟运行一次,它将每分钟创建一个新连接,这就是我们得到太多连接错误的原因。
我没有在laravel 5.4文档中找到此信息。我正在通过php artisan来查看queue:work的描述并发现描述已经改变。
这是laravel 5.2中的描述:
queue:work>>>>处理队列中的下一个作业
这是laravel 5.4中的描述
queue:work>>>>开始将队列中的作业作为守护程序处理
正如您所看到的那样,它们的意义不同。
我希望这会帮助你。
感谢。
答案 1 :(得分:0)
也许这是一个愚蠢的观察,但您是否使用DB::disconnect('foo')
来关闭数据库的连接?
无论如何,db会自动关闭,所以问题可能出在其他地方,你是否尝试过监控?
监控MySQL的一个非常强大的工具是innotop
。你可以在这里找到它:
https://github.com/innotop/innotop
检查this
答案 2 :(得分:0)
您正在使用 webserver 。如果是Apache,那么MaxRequestWorkers(以前称为MaxClients
)的设置是什么?一般来说不应超过20个。
如果设置为max_connections
以上,则可以解释您所看到的内容。