Laravel 会话表中已有太多客户端出错
我有一个高流量的网站,使用HAProxy for LoadBalancer,将我的Laravel应用程序放在3台服务器上,我已经为Redis和数据库设置了单独的服务器(我的数据库是Postgresql)。 因为我使用了负载平衡器,所以我将所有会话迁移到数据库中 今天我的网站出现了一个高峰,我的大多数用户都出现了Laravel 会话表中已有太多客户端出错,laravel,postgresql,Laravel,Postgresql,我有一个高流量的网站,使用HAProxy for LoadBalancer,将我的Laravel应用程序放在3台服务器上,我已经为Redis和数据库设置了单独的服务器(我的数据库是Postgresql)。 因为我使用了负载平衡器,所以我将所有会话迁移到数据库中 今天我的网站出现了一个高峰,我的大多数用户都出现了500内部服务器错误。当需要检查他们的权限/身份验证时,他们经常会遇到此错误。当我检查日志文件时,我发现日志文件中有许多数据库异常,这是导致内部服务器错误的原因 [2020-01-15 1
500内部服务器
错误。当需要检查他们的权限/身份验证时,他们经常会遇到此错误。当我检查日志文件时,我发现日志文件中有许多数据库异常,这是导致内部服务器错误的原因
[2020-01-15 14:14:21] producton.ERROR: SQLSTATE[08006] [7] FATAL: sorry, too many clients already (SQL: select * from "sessions" where "id" = blahblahblah limit 1) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 7): SQLSTATE[08006] [7] FATAL: sorry, too many clients already (SQL: select * from \"sessions\" where \"id\" = blahblahblah limit 1) at /home/site/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664, Doctrine\\DBAL\\Driver\\PDOException(code: 7): SQLSTATE[08006] [7] FATAL: sorry, too many clients already at /home/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31, PDOException(code: 7): SQLSTATE[08006] [7] FATAL: sorry, too many clients already at /home/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27)
我在互联网上搜索并找到了一些解决方案,有人说我应该在PostgreSQL中增加max_connections
,有文章说应该在应用层解决这个问题。但是我使用了Laravel框架,我不知道该怎么做
有人能帮我吗?正如建议的那样,有几种方法可以解决这个问题。如果要在数据库端解决此问题,可以:
- 增加max_connections参数(这是一个短期解决方案)
- 使用连接池,如pgpool或pgbounncer(还有其他连接池)。显然,如果您的应用程序在这样的环境中正常工作,那么需要测试这样的体系结构更改