【问题标题】:Stack Exchange Redis client timeoutStack Exchange Redis 客户端超时
【发布时间】:2020-07-03 18:29:32
【问题描述】:

我正在努力弄清楚来自 Stack Exchange Redis 客户端的错误消息告诉我什么:

未处理的异常:System.AggregateException:一个或多个错误 发生了。 (等待响应超时(出站=0KiB,入站=0KiB, 经过 32516 毫秒,超时为 30000 毫秒),inst:0,qu:0,qs:1,in:0, serverEndpoint:未指定/XXX:6379,管理人员:9 10 个可用,客户端名称:YYY,IOCP: (忙=0,空闲=1000,最小=2,最大=1000),工人: (忙=1025,空闲=31742,最小=1024,最大=32767),v:2.0.571.20511(请 查看这篇文章,了解一些常见的客户端问题 可能导致超时: https://stackexchange.github.io/StackExchange.Redis/Timeouts)) ---> StackExchange.Redis.RedisTimeoutException:等待响应超时 (出站=0KiB,入站=0KiB,经过32516ms,超时为30000ms), inst: 0, qu: 0, qs: 1, in: 0, serverEndpoint: 未指定/XXX:6379,经理:10 个中有 9 个可用, 客户端名称:YYY,IOCP:(忙=0,空闲=1000,最小=2,最大=1000), 工人:(忙=1025,空闲=31742,最小=1024,最大=32767),v:2.0.571.20511 (请查看这篇文章了解一些常见的客户端问题 这可能导致超时: https://stackexchange.github.io/StackExchange.Redis/Timeouts

我正在使用此代码选择负载最少的连接多路复用器并退出,但在触发大量字符串设置命令时我仍然会超时。

public class RedisConnectionManager : IRedisConnectionManager
{
    private const int MaxQueueLength = 10;
    private readonly List<Lazy<ConnectionMultiplexer>> _connectionMultiplexers;

    public RedisConnectionManager(List<Lazy<ConnectionMultiplexer>> connectionMultiplexers)
    {
        this._connectionMultiplexers = connectionMultiplexers;
    }

    public async Task<ConnectionMultiplexer> GetLeastBusyConnectionAsync()
    {
        var leastBusyConnection = this._connectionMultiplexers.OrderBy(connection => connection.Value.GetCounters().Interactive.TotalOutstanding).First();
        await WaitUntilConnectionAvailableAsync(leastBusyConnection);
        return this._connectionMultiplexers.OrderBy(connection => connection.Value.GetCounters().Interactive.TotalOutstanding).First().Value;
    }

    private static async Task WaitUntilConnectionAvailableAsync(Lazy<ConnectionMultiplexer> leastBusyConnection)
    {
        while (leastBusyConnection.Value.GetCounters().Interactive.TotalOutstanding > MaxQueueLength)
        {
            await Task.Delay(100);
        }
    }
}

【问题讨论】:

  • 这方面有什么进展吗?

标签: redis stackexchange.redis


【解决方案1】:

关于这个有几个答案。

在您的特定情况下,这看起来像是 ThreadPool 节流的问题,其中繁忙线程为 1025,超过了 Min 配置的 1024 个线程。

工人:(忙碌=1025,空闲=31742,最小=1024,最大=32767)

看看这里,但要注意文章中提到的其他服务器性能后果(取决于您的用例)。 https://gist.github.com/JonCole/e65411214030f0d823cb#file-threadpool-md

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多