Laravel 5.4 和 Mariadb 的连接错误太多

Too many connections error with Laravel 5.4 and Mariadb

我最近将我的 laravel 应用程序从 5.1 升级到 5.4。我的服务器现在在 PHP 7 和 Maria db 10.1.22 上。现在我遇到了一个非常奇怪的错误。有时,我会尝试刷新浏览器,PHPMyAdmin 会显示 #1040 - Too many connections。其他时候我会在我的应用程序上点击一个新的 link 然后会得到同样的错误。我在互联网上做了一些研究并执行了以下命令:

show variables like 'max_connections`

上面的命令给了 100。然后我增加到 500。

但现在我仍然得到错误。这对我来说很奇怪,因为我在另一台服务器上安装了 oracle mysql 5.6,而 max_connections 是 151,一年半以来我都没有遇到过这个错误。

当我 运行 命令 show processlist 时,我得到以下结果并且这个结果不断增加。这正常吗?

Mariadb 可能有什么问题,我该如何解决。

也许这是一个愚蠢的观察,但是您是否使用 DB::disconnect('foo') 关闭了数据库的连接?

无论如何,数据库自动关闭,所以问题可能出在其他地方,您是否尝试监控?

一个非常强大的监控工具 MySQL 是 innotop。您可以在这里找到它:

https://github.com/innotop/innotop

勾选this

您使用什么网络服务器。如果是 Apache,那么它的 MaxRequestWorkers(以前称为 MaxClients)的设置是什么?一般不超过20个左右。

如果设置的值大于 max_connections,那将解释您所看到的内容。

我不确定你们是否找到了解决方案,但我也遇到了同样的问题并找到了解决方案。当我们将 laravel 应用程序从 5.2 升级到 5.4 时,我们错过了一些重要的事情。 php artisan queue:work 也升级了。

在laravel 5.2中,当我们执行queue:work。它一次只处理一个作业,但在 laravel 5.4 queue:work 中为您的队列创建连接并保持连接。因此,如果您的 cron 中每分钟有 queue:work 到 运行,它将每分钟创建一个新连接,这就是为什么我们会收到连接过多错误的原因。

我没有在 laravel 5.4 文档中找到此信息。我正在通过php artisan查看queue:work的描述,发现描述被更改了。

这是laravel 5.2中的描述:

queue:work >>>> Process the next job on a queue

这是laravel 5.4

中的描述

queue:work >>>> Start processing jobs on the queue as a daemon

如您所见,它们的用途有所不同。

希望对您有所帮助。

谢谢。