现象
最近线上的redis服务器会莫名出现无法突然之间无法连接的情况,需要重启一下redis服务器才能正常工作,感觉很诡异.
查看redis日志,发现报如下错误:
Error allocating resoures for the client
网上搜索之后,找到
根据描述, 怀疑可能是redis连接数太多导致,于是查看
$ redis-cli -a password info | grep connected_clients
connected_clients:6997
这还是我刚刚才重新启动了redis server不久看到的数据。
为什么会用这么高连接数?上面的文章中介绍的是由于代码引起不停地创建redis Connection pool导致。仔细检查了自己的代码之后,发现不会有这种情况,但为什么还是会有这么高的连接?
验证
经过调试发现。虽然使用py-redis连接redis, 它使用到了连接池,但是,连接池默认是没有设置连接数的上限(可以通过相关参数设置),当高并发时,它会不断的创建连接,并且这些连接用完之后也不会自动释放。
由于我们的服务运行采用的gevent方式。 因此, 更容易引起这个问题。为了验证自己的
猜测, 写了个简单的计数程序app.py测试一下。
:::python
from flask import Flask
from flask_redis import FlaskRedis
REDIS_URL = "redis://:password@localhost:6379/0"
DEBUG = True
app = Flask(__nam