社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Redis

使用stackexchange.redis库时超时和对redis的慢速请求

Dobby007 • 4 年前 • 1170 次点击  

我们已经开始在应用程序中使用redis来持久化api响应。我选择使用stackexchange.redis来处理它,在实现了保存响应的整个逻辑之后,压力测试的结果变得非常令人失望。应用程序的总吞吐量降低了3-4倍!它大约是550-600转/秒,现在大约是180转/秒(甚至更慢)。

在压力测试过程中,有时根本没有异常,但有时会发生超时异常,如下所示:

Timeout awaiting response (5094ms elapsed, timeout is 5000ms), inst: 0, qs: 10, in: 65536, mgr: 10 of 10 available, IOCP: (Busy=26,Free=974,Min=8,Max=1000), WORKER: (Busy=3,Free=32764,Min=8,Max=32767), v: 2.0.513.63329 
Timeout awaiting response (5063ms elapsed, timeout is 5000ms), inst: 0, qs: 4, in: 47355, mgr: 10 of 10 available, IOCP: (Busy=40,Free=960,Min=8,Max=1000), WORKER: (Busy=34,Free=32733,Min=8,Max=32767), v: 2.0.513.63329 
The timeout was reached before the message could be written to the output buffer, and it was not sent (5000ms, inst=3, qs=3, in=10, active=HMSET), inst: 3, qs: 3, in: 10, mgr: 10 of 10 available, IOCP: (Busy=36,Free=964,Min=8,Max=1000), WORKER: (Busy=34,Free=32733,Min=8,Max=32767), v: 2.0.513.63329 

下面是上一次压力测试期间发生的所有超时异常的总体概览: Statistics

我曾尝试实现连接池(基于totaloutstanding属性),尝试减少对redis的请求数量,等等,但都没有帮助。

我执行了show log和latency doctor命令,但似乎我们的redis实例没有问题(尽管我们已经按照医生的建议禁用了thp)。

我的假设是,一些非常大的api响应会阻止其他请求完成。我认为是因为高的入站流量值。对吗?怎么办?我需要以某种方式分离请求吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43180
 
1170 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Ojingo
Reply   •   1 楼
Ojingo    5 年前

我在这里看到一个有趣的提示:

The timeout was reached before the message could be written to the output buffer

我认为,基本上,redis告诉你清除传入的消息,因为它是 消防炮 你的数据。很可能你已经创建了一个范围相当广的订阅。

我也经历过同样的经历,结果只是把数据塞进了内存缓存(又名 ConcurrentQueue<T> )在订阅lambda上,并在一个单独的、受限制的线程中处理消息结果,该线程将检查队列并处理内容,这是典型的生产者-消费者队列方法。这时超时错误消失了。