gpt4 book ai didi

c# - StackExchange.Redis.RedisTimeoutException : Timeout awaiting response

转载 作者:行者123 更新时间:2023-12-04 12:11:42 26 4
gpt4 key购买 nike

我有一个由 6 个实例、3 个主服务器和 3 个从服务器组成的 Redis 集群。我的 ASP .NET Core 应用程序将其用作缓存。有时我会收到这样的错误:StackExchange.Redis.RedisTimeoutException: Timeout awaiting response (outbound=0KiB, inbound=5KiB, 5504ms elapsed, timeout is 5000ms), command=GET, next: GET CRM.UsersMainService.GetUserInfoAsync.vvs1@domain.org, inst: 0, qu: 0, qs: 6, aw: False, rs: DequeueResult, ws: Idle, in: 0, in-pipe: 5831, out-pipe: 0, serverEndpoint: 5.178.85.30:7002, mgr: 9 of 10 available, clientName: f0b7b81f5ce5, PerfCounterHelperkeyHashSlot: 9236, IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=10,Free=32757,Min=2,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts) (Most recent call last)

最佳答案

正如我从您的异常消息中看到的那样,您的最小工作进程数对于您的流量来说太低了。

WORKER: (Busy=10,Free=32757,Min=2,Max=32767)



发生此异常时,您有 10 个繁忙的工作线程,而启动时您有 2 个工作线程。

当您的应用程序用完可用线程来完成操作时,.NET 会启动一个新线程(当然,直到最大值)。并稍等片刻,看看是否需要额外的工作线程。如果您的应用程序仍然需要工作线程,那么 .NET 会启动另一个工作线程。然后一个,然后另一个……但这需要时间。它不会在 0 毫秒内发生。通过查看您的异常消息,我们可以看到 .NET 创建了 8 个额外的工作线程 (10 - 2 = 8)。在创建过程中,这个特定的 Redis 操作一直在等待并最终超时。

您可以使用 ThreadPool.SetMinThreads(Int32, Int32)应用程序开头的方法来设置最小线程数。我建议你从 ThreadPool.SetMinThreads(10, 10) 开始并在测试时对其进行调整。

补充阅读:

https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreads
https://stackexchange.github.io/StackExchange.Redis/Timeouts.html

关于c# - StackExchange.Redis.RedisTimeoutException : Timeout awaiting response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57661799/

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