2016-11-22 146 views
0

我有一个使用StackExchange.Redis的分布式Web服务(WCF),每天有大约5千万个请求。StackExchange.Redis超时请求数量大

我收到这个错误一些时间(这些值可以diferent一些次):

System.TimeoutException:超时执行SISMEMBER KeyAllUsersFlag,研究所:7,队列:6,曲:0,适量:6 ,qc:0,wr:0,wq:0,in:20,ar:0,clientName:SERVER,IOCP :(Busy = 20,Free = 3180,Min = 2400,Max = 3200),WORKER :(Busy = 7,免费= 793,最小值= 400,最大值= 800),本地-CPU:在webconfig不可用

我有:

的httpRuntime targetFramework = “4.6.1” minFreeThreads = “704” minLocalRequestFreeThreads = “608”

在机器配置我有:

中processModel maxWorkerThreads = “100” maxIoThreads = “400” minWorkerThreads = “50” minIoThreads = “300”

在配置为多路复用器我有:

var configurationOptions = new ConfigurationOptions 
{ 
    AbortOnConnectFail = false, 
    SyncTimeout = 2000, 
}; 

我可以做些什么来otimize呼叫redis,有一个快速的反应,并没有得到这个错误?

+1

也许有关https://github.com/StackExchange/StackExchange.Redis/issues/83 –

回答

1

您可能在与redis服务器建立的连接数量方面存在问题。连接正在通过TCP端口建立。单个源IP对单个目标IP和端口的TCP会话的最大数量为65,535。这假定源IP的16位源端口范围(不包括0)中的每个可用源端口都被使用。实际上,大多数操作系统仅创建临时源端口 - 客户端使用的端口类型 - 从端口32768开始(0-65535范围后半部分的最低号码),这意味着您可以最多连接32,768个连接到单个目标IP和侦听端口。显然,其他资源约束可能会阻止这一点,但这是理论上的最大值。长话短说 - 请确保您在工作完成后关闭连接(SISMEMBER命令)。错误消息表示您有可用的工作人员,但他们无法建立与Redis服务器的连接,并且由于客户端超时而失败。 请检查连接号码,如果您连接的可用连接数量不足,请在连接到redis时使用keepAlive选项。您还可以使用connectTimeout选项设置连接操作的超时时间(以毫秒为单位),并使用connectRetry设置初始连接命令期间重复尝试连接的次数。