Laravel 5.4 和 Mariadb 的连接错误太多

Posted

技术标签:

【中文标题】Laravel 5.4 和 Mariadb 的连接错误太多【英文标题】:Too many connections error with Laravel 5.4 and Mariadb 【发布时间】:2017-10-30 02:09:51 【问题描述】:

我最近将我的 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 可能有什么问题,我该如何解决。

【问题讨论】:

奇怪!这是记录在 laravel 日志文件中吗?你能检查堆栈跟踪吗? 【参考方案1】:

我不确定你们是否找到了解决方案,但我也遇到了同样的问题并找到了解决方案。当我们将 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 >>>> 处理队列中的下一个作业

这是 laravel 5.4 中的描述

queue:work >>>> 开始作为守护进程处理队列中的作业

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

希望对你有所帮助。

谢谢。

【讨论】:

您好,感谢您的回答。几个月前我找到了答案。刚刚忘记发布答案了。 您好,有什么解决办法?不执行队列:每分钟在 cron 中工作,但只启动一次守护进程?谢谢 如何在 laravel 7 中为队列设置 cron 作业。请帮忙,我也遇到了这个错误。【参考方案2】:

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

如果设置为大于max_connections,这将解释您所看到的。

【讨论】:

嗨 @Rick James 我正在使用 Apache。我在 httpd.conf 文件中找不到 MaxClient。请问它在哪里 嗨@Rick James。我检查过。 MaxRequestWorkers: 150max_connections: 151 这比我想要的要紧。我很惊讶 500 并没有解决问题。也许我看错了方向。是否只有一台 Apache 服务器?有什么东西在做“连接池”吗? 只有一台 Apache 服务器。我有一个每分钟运行一次的 cron 条目来执行我的计划命令。当我执行show processlist 时,我看到我的数据库被多次列出,并且“命令”列的值重复睡眠。 150 来自 Apache + 1 来自 cron + 1 来自你观看 > 151。【参考方案3】:

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

反正db会自动关闭,所以问题可能出在其他地方,你试过监控吗?

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

https://github.com/innotop/innotop

查看this

【讨论】:

以上是关于Laravel 5.4 和 Mariadb 的连接错误太多的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel 5.4中进行左连接

社交名流 laravel 5.4 Facebook 提供商

Laravel 5.4 推送错误

laravel框架 5.4自定义报错页面设置

laravel 5.4 php artisan serve 无效请求(意外的 EOF)

yajra/laravel-datatables 搜索不适用于 laravel 5.4