如何解决将“达到的最大客户端数量” redis错误消息更改为“
是否可以将错误消息“已达到最大客户端数”更改为空字符串或空字符串?
我将redis用作数据库值的缓存,如果无法从缓存中获取值,我将从数据库中获取它。 如果我可以在redis it self中对其进行配置,那对我来说将是最好的选择,因为无需更改代码即可支持这种极端情况。
如果有人对如何避免此类错误有一些提示,那也将很不错:)(我正在使用带有predis软件包的PHP脚本)
解决方法
错误消息max number of clients reached
清楚地表明Redis已达到客户端限制,无法处理任何新请求。
- 此问题可能与代码中
Predis\Client
的错误使用有关。而是一次创建一个连接对象(singleton
),并在整个过程生命周期内使用它。该代码可能会在对Redis的每次请求中创建一个 new 对象,并使所有这些连接保持打开状态。 - 还有另一件事需要检查Web服务器如何管理
php
进程。 Web服务器(例如apache prefork
,nginx php-fpm
)可能会长时间离开进程,以保持与Redis的连接并耗尽服务器资源(mem,cpu)。 - 如果上面没有什么是真的-问题(错误)可能在
predis
库中。
底线:代码/ Web服务器耗尽maxclients
的限制。
如果您无法控制代码/ Web服务器(例如nginx
),则可以减少以下错误消息的数量:
- 将
maxclients
增加10k以上(取决于您的Redis服务器资源)。这样可以减少错误消息的出现频率。 - 考虑启用(默认情况下禁用)连接
timeout
(请谨慎使用,因为您的代码可能会假设连接永远不会超时)。这将从连接池释放旧连接。 - 将
tcp-keepalive
从300
秒减少到少于timeout
。这将关闭与dead peers
的连接(即使看起来连接也无法访问的客户端)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。