gpt4 book ai didi

c# - 使用 StackExchange.Redis 库时对 Redis 的超时和缓慢请求

转载 作者:IT王子 更新时间:2023-10-29 06:16:31 27 4
gpt4 key购买 nike

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

有时候在压测过程中完全没有异常,但是时不时会出现这样的超时异常:

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 响应会阻止其他请求完成。我认为是因为入站流量值很高。这是对的吗?可以用它做什么?我需要以某种方式分离请求吗?

最佳答案

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

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

我认为,基本上,Redis 是在告诉您清除传入的消息,因为它正在向您流出 数据。您可能已经创建了一个范围相当广泛的订阅。

我经历了同样的经历,最后只是将数据推送到订阅 lambda 上的内存缓存(又名 ConcurrentQueue<T> ),并在一个单独的、节流的线程中处理消息结果,该线程将检查队列并处理内容,典型的生产者-消费者-队列方法。超时错误在那时消失了。

关于c# - 使用 StackExchange.Redis 库时对 Redis 的超时和缓慢请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53601215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com